重载和模板的知识点:
重载分为函数重载和运算符重载。
C++语言编译系统允许为两个或两个以上的函数取相同的函数名,但是形参的个数或是形参的类型不应相同。编译系统会根据实参和形参的类型及个数的最佳匹配,自动确定调用哪个函数,这就是所谓的函数重载。
而为了表达上的方便,可以将c++语言编译系统中预定的运算符用在特定类的对象上以新的含义进行解释,即用户重新定义已有运算符的功能,这就是运算符重载。运算符重载实际上就是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。
运算符重载中:
1.除了成员运算符“.”,作用域运算符“::”,条件运算符“?:”,成员指针运算符“*”,编译预处理命令的开始符号“#”外其他运算符都可以重载;
2.重载运算符时,不能改变他们的优先级、结合性,不能改变这些运算符所需操作数的数目,也不能改变使用运算符的语法语义。在C++中不能定义新的运算符。
3.运算符重载实质上是函数重载,因此编译程序对运算符重载的选择遵循函数重载的选择原则。
4.运算符重载可以使用成员函数和友元函数两种形式,其中只能使用成员函数重载的运算符有:(),[],=,->,new,delete;
模板知识点:
模板分为函数模板和类模板,C++语言中可以使用模板来避免在程序中多次书写相同的代码,可以从一个函数模板中生成多个函数,或是从一个类模板中生成多个类。大大增强了函数和类设计的通用性。
函数模板的一般说明如下:
-----------------------------------------
template<模板参数表>
<返回值类型><函数名><模板参数形参表>
{
//函数模板定义体;
}
-----------------------------------------
注:1.<模板参数表>尖括号中不能为空,参数可以有多个,用逗号分开。
2.类型形参多余一个时,每个类型形参都要使用class或是typename;
3.模板声明语句必须置于与其相关的函数声明或定义语句之前。
4.函数模板不是一个实实在在的函数,编译系统不为其产生任何执行代码。函数模板只是说明,不能直接执行,需要实例化为模板函数才能执行。
类模板的一般说明如下:
类模板的定义如下:
---------------------------------------------------
template<class 类属参数1,class 类属参数2,…>
class NameOfClassTemplate
{}
---------------------------------------------------
注:1.类模板为类定义了一种模式,使得类中的某些数据成员,某些成员函数的参数以及某些成员函数的返回值,能取任意数据类型
2.c++编译器根据类模板和特定的数据类型来产生一个类,即模板类,它是实实在在的一个类。
3.对象是类的实例,模板类是类模板的实例。