c++ 教程六模块

52 阅读2分钟

模块

template<class T>
函数声明或定义

//函数模板
//两个整形交换函数
void swapInt(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

//函数模板
template<typename T>	//声明一个模板,告诉编译器后面紧跟着T
void mySwap(T &a, T &b) {
	T temp = a;
	a = b;
	b = temp;
}


int main() {

	//利用函数模板交换
	//1.自用类型推导
	int a = 10;
	int b = 20;
	//mySwap(a, b);
	//2.显示指定类型
	mySwap<int>(a,b);


函数模板的注意事项

自动推导,必须要一致才行
模板必须要明确的数据类型才可以用

函数模板案例

普通函数和函数模板的区别

// 普通函数调用可以发生隐式类型转换
//函数模板 用自动类型推导,不可以发生隐式转换
//函数模板 用显示指定类型,可以发生隐式转换

普通函数与函数调用规则
1.如果普通函数和函数模板都可以调用,优先考虑普通函数
2.可以通过空模板参数列表,强制调用 函数模板
myPrint<>(a,b);//空模板
3.函数模板可以发生函数重载
4.如果函数模板可以产生更好的匹配,优先调用函数模板

函数模板的局限性

template<class T>
void f(T a, T b){
	a = b;
}

学习模板并不是为了写模板,而是在STL中能够运用系统提供的模板

类模板

建立一个通用类,类中的成员 数据类型可以不具体,用一个虚拟的类型来代表

template<class NameType, class AgeType>
class Person{
	
};


template<class NameType, class AgeType>
class Person {
public:
	Person(NameType name, AgeType age) {
		this->m_Name = name;
		this->m_Age = age;
	}
	NameType m_Name;
	AgeType m_Age;
};

void test03() {
	Person<string, int> p1("孙悟空", 9999);
}

类模板和函数模板的区别

//类模板中成员函数创建时机
//类模板中成员函数在调用时才去创建

类模板对象做函数参数

1.指定传入的类型 ---直接显示对象的数据模型
2.参数模块坏
3.整个类模块化

类模板与继承

当子类继承的父类
template<class T>
class Base{
	T m;
    
};
class Son:public Base<int>,必须要知道父类中的T类型,才能继承子类
	
};