码迷,mamicode.com
首页 > 编程语言 > 详细

2020.12.c++模板

时间:2020-12-15 12:20:03      阅读:3      评论:0      收藏:0      [点我收藏+]

标签:main   转换   显示   ++   数值   模板   概念   end   虚拟   

c++模板

一.概念

1.特点

  • 模板不可以直接使用,它只是一个框架
  • 模板的通用并不是万能的

二.函数模板

1.函数模板的作用

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

2.函数模板的语法和使用

//template---声明创建模板
//typename---表明其后面是一种数据类型,也可以用class代替
template<typename T>//声明一个模板
//以下是函数的声明或定义
  • 实际案例:完成两个相同类型的值的交换

    #include <iostream>
    using namespace std;
    
    template<typename T>
    void mySwap(T& a, T& b) {
    	T temp = a;
    	a = b;
    	b = temp;
    }
    //模板函数的使用
    
    void test02() {
    	int a1 = 1;
    	int b1 = 2;
    	cout << a1 << endl;
    	cout << b1 << endl;
    	mySwap(a1, b1);//自动类型推导
    	//mySwap <int>(a1,b1);显示指定类型
    	cout << a1 << endl;
    	cout << b1 << endl;
    }
    
    int main() {
    	test02();
    }
    /*1
    2
    2
    1*/
    

3.函数模板注意事项

  • 自动类型推导,必须导出一致的数据类型T,才可以使用
  • 模板必须要确认T的数据类型才能使用

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

  • 普通函数调用可以发生隐式类型转换
  • 函数模板 用自动类型推导,不可以发生隐式类型转换
  • 函数模板 用显示指定类型,可以发生隐式类型转换(比如:两个数字相加得到一个int型,如果其他一个数是char型--->会隐式转换为int型)

5.普通函数和函数模板的调用规则

三.类模板

1.类模板的作用

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

2.类模板的语法和使用

template<class T>//类模板声明
//底下写类的定义
//<class T>---->模板参数表,不能为空,参数可以有多个,用逗号隔开
    
  • 使用
#include <iostream>
using namespace std;
#include <String>

template<class Nametype,class Agetype>
class Person {
public:
	Person(Nametype name,Agetype age) {
		p_name = name;
		p_age = age;
	}

	Nametype p_name;
	Agetype p_age;
};

void test03() {
	Person<string, int> p1("aaa", 10);
	cout<<p1.p_age<<p1.p_name<<endl;
}

int main() {
	test03();
}
/*10aaa*/

3.类模板和函数模板的区别

  • 类模板没有自动类型推导的使用方式,只能使用显示类型法。

  • 类模板在模板参数列表中有默认参数

    (比如上面的:template<class Nametype,class Agetype=int>

    ? 在之后的构造对象后,可以不显示后面Agetype的类型

    ? Person p2("bbb",20)

    )

2020.12.c++模板

标签:main   转换   显示   ++   数值   模板   概念   end   虚拟   

原文地址:https://www.cnblogs.com/lyj-study/p/14110758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!