首页 > 编程语言 >C++泛型编程:类模版中成员函数的创建时机,类模版函数传参、类模版继承

C++泛型编程:类模版中成员函数的创建时机,类模版函数传参、类模版继承

时间:2025-01-09 22:58:16浏览次数:3  
标签:传参 p1 msg1 函数 people 模版 msg2 msg

普通类的成员函数的话,在刚开始就创建出来了,但是类模版中的成员函数的话,只有在具体调用运行的时候才会被创建,可见以下代码例子:

#include<iostream>
using namespace std;

class people1 {
public:
	void run() {
		cout << "跑" << endl;
	}
};

class circle1 {
public:
	void hua() {
		cout << "画" << endl;
	}
};

template<class T>
class tst {
	T sq;
public:
	void msg1() {
		sq.run();
	}
	void msg2() {
		sq.hua();
	}
};

int main() {
	tst<people1> sq1;
	sq1.msg1(); // 这会才创建
	tst<circle1> sq2;
	sq2.msg2();
	return 0;
}

类模版函数传参有三种,可见以下代码示例:

#include<iostream>
using namespace std;

template<class Msg1, class Msg2>
class people {
public:
	people(Msg1 msg_1, Msg2 msg_2) {
		this->msg1 = msg_1;
		this->msg2 = msg_2;
	}
private:
	Msg1 msg1;
	Msg2 msg2;
};
// 1,直接指定类型
void tst1(people<string, int>& p1) {

}

// 2,参数模版化
template<class T1, class T2>
void tst2(people<T1, T2> &p1) {

}

// 3,类模版化
template<class T>
void tst3(T &p1) {

}
int main() {
	people<string, int> p1("王五", 180);
	tst1(p1);
	tst2(p1);
	tst3(p1);
	return 0;
}

类模版继承可见下,也是非常直观的,看代码理解即可:

#include<iostream>
using namespace std;

template<class Msg1, class Msg2>
class people {
public:
	people(Msg1 msg_1, Msg2 msg_2) {
		this->msg1 = msg_1;
		this->msg2 = msg_2;
	}
private:
	Msg1 msg1;
	Msg2 msg2;
};

template<class T1, class T2, class T3>
class people2 : public people<T1, T2> {
	T3 t3;
};

int main() {
	people<string, int> p1("王五", 180);
	return 0;
}

标签:传参,p1,msg1,函数,people,模版,msg2,msg
From: https://blog.csdn.net/qq_43355454/article/details/145044001

相关文章

  • js惰性函数
    JavaScript中的惰性函数(LazyFunction)是一种优化技术,它允许在首次调用函数时执行一些初始化工作,之后可能会替换原始函数为一个更简单的版本。这种模式可以用来提高性能,特别是在函数内部有一些昂贵的操作或检查,而这些操作只需要执行一次。惰性函数的基本思想是:当函数第一次被调用......
  • C语言文件处理中的常见函数整理
    这里只是整理了一小部分常见的并附上了使用代码,希望对你有帮助!注意:这些函数都是建立在文件之上的,必须有打开文件、读写文件、关闭文件的流程才能使用一.顺序读写1.fputc从文件中读取一个字符写文件的原理:光标一开始在最开始的位置,读取/写入一个字符,就往后调一个光标......
  • 函数视为无穷维空间中的无穷维向量,有振动的地方就有特征值
    线性代数,即有限维空间的泛函分析二阶微分算子,满足可加性和齐次性(homogeneity),无穷维空间中的线性变换函数,就是无穷维空间中的向量,所谓向量,就是可以进行加法和数乘运算的元素,无穷维空间中可以使用傅里叶级数、勒让德多项式、泰勒级数等下面是我和chatgpt的回答问题:如何理解函......
  • 提升 PHP 编码效率的 10 个实用函数
    PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。以下列出了10个可以显著加快您的编码过程的PHP函数:1、array_map()array_map() 当需要对数组每个元素执行相同......
  • 【学习笔记】【数论】欧拉函数&莫比乌斯函数及反演
    一、欧拉函数1.欧拉函数的意义\(\phi(n)\)表示从\(1\)到\(n\)所有与\(n\)互质的数的数量。表达式为:\(\sum\limits_{i=1}^{n}[\gcd(i,n)=1]\)。2.欧拉函数的通解公式\(\phi(n)=n\prod\limits_{i=1}^{k}(1-\frac{1}{p^i})\)(\(p_i\midn\),\(p_i\)为素数,\(k\)为小于等于......
  • 何时使用构造函数?
    在前端项目中,构造函数(constructor)是用于创建对象的一个特殊方法,通常在以下几种场景下使用:1.自定义类的实例化(类的构造函数)在ES6中,class提供了面向对象编程的方式。每个类都可以有一个构造函数,用来初始化类的实例。典型使用场景:定义一个对象模板,并在实例化时初始化对象的......
  • Vue3 reactive函数
    1、作用定义一个对象的响应式数据(基本类型不用它,用ref)2、使用a、引入import{reactive}from'vue';b、语法const代理对象=recative(源对象)源对象可以是数组或对象,返回Proxy对象的实例对象3、reactive定义的响应式是深层次的4、案例<template><h2>姓名:{{......
  • Azure基础认证(AZ-900)完全指南:(二十一)计算的演变 - 函数
    点击进入:Azure基础认证(AZ-900)完全指南(一):认证概述点击进入:Azure基础认证(AZ-900)完全指南(二)考试概述点击进入:Azure基础认证(AZ-900)完全指南:(三)什么是云计算?点击进入:Azure基础认证(AZ-900)完全指南:(四)云服务点击进入:Azure基础认证(AZ-900)完全指南:(五)什么是Azure点击进入:Azure基......
  • Vue3 ref函数 数据响应式
    1、作用:定义响应式数据2、语法a、创建创建一个包含响应式数据的引用对象letxx=ref(数据)b、JS操作xx.valuec、模板操作{{xx}}3、注意数据可以是:基本类型,也可以是对象类型基本类型需要.value获取值,对象中的数据不需要案例<template><h2>姓名:{{name}}</h2>......
  • Python 魔法学院 - 第05篇:Python 函数 ⭐
    目录1.引言2.函数的基本概念2.1什么是函数?2.2为什么使用函数?3.函数的定义与调用3.1定义函数3.2调用函数3.3示例:简单的函数定义与调用4.函数的参数与返回值4.1参数的类型4.2返回值4.3示例:多种参数类型的函数5.函数的作用域5.1局部变量与全局变量5.2示例......