一、概括:
c++在面向过程程序设计方面和c基本兼容,具体不兼容的见最后。本篇主要总结 函数重载,函数模板及泛型编程。c++是强类型语言,强类型语言灵活性较差,但效率很高,c++在保证效率的同时也追求灵活性。以上三个特性就是为了灵活性而设计的。
二、函数的重载
因为c++是强类型语言,所以具有相同逻辑不同参数类型的函数要分别实现,自然也要具有不同的函数名称。函数重载可以使具有相同逻辑的参数不同的函数具有相同的名称,这样做的意义在于可以使接口单一,清晰。
#include <stdio.h>
#include <stdlib.h>
int add(int num1,int num2)
{
return(num1+num2);
}
double add(double num1,double num2)
{
return(num1+num2);
}
int main(void)
{
printf("%d\n",add(3,4));
printf("%f\n",add(3.0,4.0));
system("pause");
return 0;
}
/*
因为和c语言兼容,所以就存在数据类型自动隐式转换,所以函数重载也存在自动隐式转换,就产生了
噩梦般的垃圾函数重载参数自动推演,在实际设计最好为没一个需要的操作可能设计对应的函数,避免让c++进行自动推演。
例如不要调用add(3,4.0),如果需要请设计一个 double add(int num1,double num2);
*/
三、函数模板
函数重载机制可以让接口单一,清晰,但是我们还是要为不同的参数类型实现不同的函数,函数模板机制就是把参数类型抽象化,这样我们只需要写出函数模板,然后根据函数模板实例化出我们需要的函数。(这在脚本语言里是多么的平常的事情啊)
#include <stdio.h>
#include <stdlib.h>
template <typename first_type,typename second_type>
second_type add(first_type num1,second_type num2) //返回值类型必须由参数类型取得
{
return(num1+num2);
}
int main(void)
{
printf("%d\n",add(3,4));
printf("%f\n",add(3,4.0));
printf("%f\n",add(3.0,4.0));
system("pause");
return 0;
}
/*
多么强大的功能,往往我们被其他的细枝末节所牵绊,而不敢往前。
*/
四、泛型编程
函数模板给于我们很多启示,数据类型的抽象化给编程带来了巨大的灵活性,
五、异常处理