C++笔记-模板

C++笔记-模板,第1张

C++笔记-模板 为什么要有模板?

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

函数模板
  • 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表

  • 语法:

    template   (或class T)

    函数声明或定义

 有两种使用方法

 

  • 自动类型推导
  • 显示指定类型

  •  普通函数和函数模板的区别:
  1. 普通函数可以发生自动类型转换(如把char类型转换成int类型)
  2. 函数模板用自动类型推导,不可以发生隐式类型转换
  • 普通函数与函数模板调用规则
  1. 优先调用普通函数
  2. 可以通过空模板参数列表来强制调用函数模板
空模板参数列表:myAdd<>(a, b) 

        3.函数模板也可以发生重载

        4.如果函数模板可以产生更好的匹配,优先调用函数模板

类模板

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

语法同函数模板

类模板与函数模板区别
  1. 类模板没有自动类型推导的使用方式
  2. 类模板在模板参数列表中可以有默认参数

 

 

类模板中的成员函数创建时机

普通类里的成员函数一开始就可以创建

类模板中的成员函数在调用时才可创建

类模板对象做函数参数

三种传入方式

  • 指定传入的类型-----直接显示对象的数据类型
4.	template
5.	class Person {
6.	public:
7.		T1 name;
8.		T2 age;
9.		Person(T1 name, T2 age) {
10.			this->name = name;
11.			this->age = age;
12.		}
13.	
14.		void show() {
15.			cout << this->name << "  " << this->age;
16.		}
17.	};
18.	
19.	void test(Personp) {
20.		p.show();
21.	}
22.	
23.	int main() {
24.		Personp("小a", 100);
25.		test(p);
26.	}

 

2.参数模板化----将对象中的参数变为模板进行传递

template
void test(Person&p) {
p.show();
}

 

3.整个类模板化----将这个对象类型模板化进行传递

template
void test(T &p) {
p.show();
}
类模板与继承

当子类继承的父类是一个类模板时,子类在声明的时候,要指出父类中T的类型

如果不指定,编译器无法给子类分配内存

如果想灵活指定出父类中T的类型,子类也需变为类模板

 

 

类模板成员函数类外实现

 

template

Person::funcName(T1 a,T2 b)

{
}

 类模板分文件编写

问题:类模板中成员函数的创建时机是在调用阶段,导致分文件编写时连接不到

解决方式:

  1. 直接包含.cpp源文件
  2. 将.h和.cpp中的内容写到一起,并更改后缀名为.hpp

类模板与友元

  1. 全局函数类内实现-直接在类内声明友元即可
  2. 全局函数类外实现-需要提前让编译器知道全局函数的存在:加空模板参数列表,且把声明放到前边

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3970170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存