栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++函数模板

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++函数模板

前言:

此文章仅作本人学习笔记留存分享。如有出错欢迎指正。

正文:

C++ 语言的核心优势之一就是便于软件的重用, 而函数模板就很好地体现了这一优势。 假如设计一个求两参数最大值的函数,在实践中我们可能需要定义四个函数:

int max ( int a , int b ) { return ( a > b ) ? a , b ; }

long max ( long a , long b ) { return ( a > b ) ? a , b ;}

double max( double a , double b ) { return ( a >b)? a , b ; }

char max ( char a , char b ) { return ( a > b ) ? a , b ;}

这些函数几乎相同,唯一的区别就是形参类型不同。

需要事先知道有哪些类型会使用这些函数,对于未知类型这些函数不起作用。

此时使用模板即可将上面函数抽象出来,统一用一个通用函数来表示。

模板(template)是C++的一个重要特性,它对具有 相同功能 的 函数或类 的再抽象,把数据类型参数化,用一种或多种抽象的类型来表示(称为类属类型),再用一个通用形式来表示多个功能相同而数据类型不同的函数或类,实现 代码重用 的目的。 实际使用时,再 用具体的类型去替代模板中的类属类型 ,这称为实例化。

函数模板定义方式如下:

template < 模板形参表 >

返回值类型 函数名(形参表)

   {

     //函数体

    };

代码实验:

.h头文件

//实例化的函数模板称为模板函数
//下面是一个简单的交换两值的模板函数
template
void Exchange(T &a, T &b)
{
	T c;
	c = a;
	a = b;
	b = c;
}
//结构体,用于实验
struct Student
{
	int id;        //学号
	float  gpa;   //平均分
};
//类,用于实验
class TA
{
	int i;
public:
	TA() {};//因为本例中Exchange里有T c实例化了一个对象,所以需要定义一个缺省构造函数
	TA(int i) { this->i = i; }
	void setI(int i) { this->i = i; }
	void display() { cout << "TA:"<< i << endl; }
};

 .cpp文件main()函数

void main()
{    
    //int类型
	int a = 1, b = 2;
	cout << "交换前:" << "a:" << a << 't' << "b:" << b << endl;
	Exchange(a, b);
	cout << "交换后:" << "a:" << a << 't' << "b:" << b << endl;

	//float类型
	float a2 = 1.2, b2 = 2.1;
	cout << "交换前:" << "a2:" << a2 << 't' << "b2:" << b2 << endl;
	Exchange(a2, b2);
	cout << "交换后:" << "a2:" << a2 << 't' << "b2:" << b2 << endl;

	//结构体
	Student s1{ 01, 4.5 };
	Student s2{ 02, 3.5 };
	cout << "交换前:"<< endl;
	cout << "s1.ID:" << s1.id << 't' << "s1.GPA:" << s1.gpa << endl;
	cout << "s2.ID:" << s2.id << 't' << "s2.GPA:" << s2.gpa << endl;
	Exchange(s1, s2);
	cout << "交换后:" << endl;
	cout << "s1.ID:" << s1.id << 't' << "s1.GPA:" << s1.gpa << endl;
	cout << "s2.ID:" << s2.id << 't' << "s2.GPA:" << s2.gpa << endl;

	//类
	TA ta1(1);
	TA ta2(2);
	cout << "交换前:"<< endl;
	ta1.display();
	ta2.display();
	Exchange(ta1, ta2);
	cout << "交换后:" << endl;
	ta1.display();
	ta2.display();
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号