C++模板的一些问题

函数模板的基本语法
void mySwap(T& a, T& b) {
	T temp = a;
	a = b;
	b = temp;
}
void test01() {
	int a = 1;
	int b = 2;
	//自动类型推荐

	mySwap(a, b);
	//显示指定类型
	mySwap<int>(a, b);
}

模板的目的是为了提高复用性,使类型参数化

函数模板与普通函数调用规则

在这里插入图片描述

void out(int a, int b) {
	cout << "调用的普通函数" << endl;
}
template<typename T>
void out(T a, T b) {
	cout << "调用的模板函数" << endl;
}
void test02() {
	int a = 3;
	int b = 6;
	out(a, b);
}

在这里插入图片描述
可以看出来优先调用普通函数
可以通过空模板参数列表,强制调用模板函数

void test02() {
	int a = 3;
	int b = 6;
	out(a, b);
	//通过空模板参数列表,强制调用模板函数
	out<>(a, b);
}

在这里插入图片描述
函数模板也可重载

template<typename T>
void out(T a, T b) {
	cout << "调用的模板函数" << endl;
}
template<typename T>
void out(T a, T b,T c) {
	cout << "调用的重载模板函数" << endl;
}
类模板的定义
#include<iostream>
using namespace std;
//类模板的定义
template <class NameType, class AgeType>
class Person {
public:
	Person(NameType name, AgeType age) {
		this->name = name;
		this->age = age;
	}
	void showPerson() {
		cout << "name" << this->name << "age:" << this->age << endl;
	}
private:
	NameType name;
	AgeType age;
};
void test03() {
	Person<string, int> p("tm", 21);
	p.showPerson();
}
int main() {
	test03();
	system("pause");
	return 0;

}
类模板和函数模板的区别
  • 类模板使用只能用显示指定类型方式
  • 类模板中的模板参数列表可以有默认参数
当类模板碰到继承时,需要注意一下几点:

·当子类继承的父类是一个党摸板时,子类在声明的时候,要指定出父类中T的类型·如果不指定,编译器无法给子类分配内存
·如果想灵活指定出父类中T的类型,子类也需变为类模板

构造函数的内外实现

在这里插入图片描述总结:类模板中成员函数类外实现时,需要加上模板参数列表

类模板分文件编写

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值