C/C++中的重载函数、模板和泛型
重载函数:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。
#include <stdio.h> int add(int a, int b) { return a + b; } float add(float a, float b) { return a + b; } void main() { int a = 1, b = 2; float c = 1.1,d = 2.5; printf("a+b=%d\nc+d=%lf", add(a, b), add(c, d)); }
输出结果:
a+b=3
c+d=3.600000
注意:main函数是不可以重载的。
重载函数条件:1.相同的函数名
2.不同的形参列表
(对于函数的返回值没有影响,函数名相同,形参也相同,返回值相同的函数不是重载,而算是错误的声明)
泛型:
所谓泛型编程就是以独立于任何特定类型的方式编写代码。
函数模板(function template)如下
#include <iostream> using namespace std; template <typename T>//定义模板函数以template开始 T add(T a, T b) { return a + b; } int main() { int a = 1, b = 2; float c = 1, d = 1.2; int e = add(a, b); float f = add(c, d); printf("a+b=%d\nc+d=%lf", e, f); return 0; }
输出结果:
a+b=3
c+d=2.200000
类模板 如下:
#include <iostream> using namespace std; template <class T> class operate { public: T a, b; T add() { return a + b; } }; int main() { //inital int a = 1, b = 2; float c = 1.0, d = 2.2; operate<int> add_int_num; operate<float> add_float_num; add_int_num.a = a; add_int_num.b = b; add_float_num.a = c; add_float_num.b = d; //get results printf("(int)a+b=%d\n(float)a+b=%lf\n", add_int_num.add(), add_float_num.add()); return 0; }
输出结果如下:
(int)a+b=3
(float)a+b=3.200000
在模板中关键字 typename、class具有相同的含义。
此处是对泛型编程的简单的运用,具体的理解还是需要碰到比较大的泛型编程的实际应用。