C++学习 -- 重载和缺省参数

来源:互联网 发布:mac框架 编辑:程序博客网 时间:2024/05/01 13:02

重载和缺省参数

什么是重载?

重载简单来说就是依次多义。所谓函数重载是指同一个函数名可以对应着多个函数的实现

为什么要重载?

主要是两个原因:
1. 不想使用printf_int(), printf_char(), printf_float() 来打印不同数据类型的字符。类似这样的问题,可以使用重载来解决。
2. 构造函数
因为构造函数的名字预先由类的名字确定,所以只能有一个构造函数名。但如果我们想用几种方法来创建一个对象时该怎么办呢?例如创建一个类,它可以用标准的方法初始化,也可以从文件中读取信息来初始化,我们就需要两个构造函数,一个不带参数(缺省构造函数),另一个带一个字符串作为参数,
以表示用于初始化对象的文件的名字。所以函数重载的本质就是允许函数同名。在这种情况下,构造函数是以不同的参数类型被调用的。

重载的实质?

其实是在编译的时候,函数名会被转换成如下的格式进行匹配:printf(int int)=>prinf_int()

为什么不用返回值重载?

因为使用者可以不处理返回值,如下
void f()和int f()两个函数,使用者在调用的时候可以直接写成
f(),如果使用返回值重载,那么编译器将不知道该使用那个函数。

缺省参数为什么只能发在后面?
F(int i, int j, int k=1, int l=0)  为什么缺省参数要放在后面?
例如: f(int i, int j=0, int k, int l =0)不能处理 f(3, 4, 5),编译器无法判断哪个数缺省参数。
缺省参数只在说明的时候指出,定义处不重新定义,但通常要加一个注释.

问个小问题,在一个类中有下面两个函数
    void add(int i=1) {cout << add(int i=1)<< endl;};
    void add() {cout << add()<< endl;};
当使用add()时,会调用那一个?
结论是编译不能通过。