初窥template
来源:互联网 发布:新浪乐居php面试题 编辑:程序博客网 时间:2024/06/10 05:28
在C++的学习中。我深刻体会到,类,模板是C++实现面向对象的主要内容,不仅增加了代码的可阅读性,更能清晰的表达算法,比C的流水式设计要更具有结构性。今天对于template有一个初步的认识,总结如下:
template的引入:对于函数的重载(overload)常常会遇到这样的问题:对于一个两数相加的函数add(a,b),对于a,b可以是(int,int),也可以是(char,char)或者是(int,int,int),(char,char,char),(int,int,char)(重载:对于函数的形参的类型,个数,或二者一起的改变,而用相同的函数名),但若单单只用重载。则需要写更多的函数代码。其实表达的是同一种算法,这样程序的时间和空间性能都被拖延,运用模板则可以解决这一问题。
template的分类:分为函数模板和类模板
1 函数模板的声明与定义:
template<class或typename T> 此处的class与定义类的class有区别T 函数名{定义}
示例代码:
template <class T>T add(Ta,T b){return (a+b);}
2 类模板的声明与定义:
template <class或typename T>class myclass{......}
示例代码:
#ifndef ClassTemplate_HH#define ClassTemplate_HH
template<typename T1,typename T2> //定义类时进行模板的声明
class myClass{
private:
T1 I;
T2 J;
public:
add(T1 I,T2 J) //
void show();
};
//这是构造函数
//注意这些格式
template <typename T1,typename T2> //进行参数定义时的模板声明
myClass<T1,T2>::add(T1 a,T2 b):I(a),J(b){}/在这里将形参所获得的值传给私有变量I J,在show()函数中使用;
//这是void show();
template <typename T1,typename T2> //函数定义时的模板声明
void myClass<T1,T2>::show()
{
cout<<"I+J="<<I+J<<endl;
}
由类模板的定义可以看出:不管是定义什么,只要需要将类型参数化,都要进行模板的声明。
3 无类型的模板声明
对于不是类型的东西,模板也可以对其进行模板化,如这样的定义:
template<class T, int a>
func1(T m,30)func2(T m,40)...
此处的a可以是任意int型的数。
总结:无论是对于函数,类还是已声明类型的变量,template的最大特点就是可以将类型或者别的东西变量化,使得重载更加简便。(初始认知)
这只是初窥template,做程序体会下~!
- 初窥template
- template
- Template
- template
- template
- template
- Template
- template
- template
- Template
- template
- Template
- template
- template
- Template
- template
- template
- Template
- PhpMyAdmin setup.php RFI Attacks Detected
- POJ 2976 01分数规划
- 《C++第十周实验报告2-1》----名为CPerson的类派生出CEmployee类
- java编译器对字符串+运算的优化导致的有趣现象
- 用位运算实现四则运算之加减乘除 .
- 初窥template
- c# 隐藏winform程序在任务管理器中进程
- 《C++第十周实验报告3-1》----点类,圆类,圆柱类
- c# winform使用API屏蔽系统热键和任务管理器
- java socket网络编程入门一
- 什么是BSS段
- 第十周任务三(多重派生的构造函数定义)
- c# winform 只允许运行一个实例
- Delphi各个版本和发展历史