一:重载 1.函数重载: (1)不同参数类型,不同参数个数可以重载 例如下面的不能重载: void fun(int); 和 void fun(int &) (2)不能用函数返回值重载
2.运算符重载: (1)编译器根据参加运算的操作数的类型来识别不同的运算; (2)重载运算符就是编写一个运算符函数,该函数原形是: <返回值的数据类型> operate<要重载的运算符>(<形参表>) (3)可以用普通函数或成员函数的形式重载操作符 (4)当利用非成员函数重载双目运算符时,第一个形参表示左边的操作数,第二个形参表示右边的操作数 (5)当用成员函数重载双目运算符时,运算符左边的操作符就是对象本身,不能在将它作为运算符函数的参数,这时运算符函数只需要一个参数; (6)用户不能定义新的运算符,只能对现有的运算符重载,重载后保持原来的优先级和结合性 (7)以下的运算符不能重载:.(成员运算符),::,?:,.*
二:模板(为了避免代码重复编写) 1.函数模板:即将参数和返回值的数据类型参数化 格式例如: template <class T1, class T2, class T3> T1 myfun(T2 a, T3 b) { ... } 使用方法: 例如 z=myfun(x,y); 注:上面参数的个数及在函数模板中的位置都是任意的; T1等参数类型可以用来在函数里面声明变量; 函数模板只能用于定义非成员函数; 2.类模板:是一种不确定类的某些数据成员或成员函数参数及返回值的类 格式例如: template <class T1, class T2, int i> class myclass {.....} 在模板类外部定义模板类的成员函数的格式: template <class T1, class T2, int i> T1 myclass<T1, T2, int>::myfun(T2 a, int b) {...} 类模板通过在使用模板类声明对象时给出的实际类型来确定类型参数的 例如: myclass<float, double, 123> myobj();
注:类模板的类型参数表可以含有确定类型的参数,如上面的最后一个参数,这时声明时要代入具体值??