1. 重载函数定义
出现在相同作用域内的函数, 如果其函数名相同, 而形参列表不同, 则称之为重载函数.
形参列表不同的含义为: 形参个数不同或形参类型不同, 函数不能基于返回值类型不同实现重载.
函数重载与重复声明的区别:
如果两个函数返回值类型和形参列表相同, 则第二个函数视为重复声明.
如果两个函数的形参列表完全相同, 而返回值不同, 则第二个函数声明是错误的.
2. 函数重载与 const 形参
函数重载是基于形参列表的不同而实现的, 但是 const 形参与非 const 形参有些情况下不能实现函数重载.
看以下代码:
- void lookup(Phone tm);
- void lookup(const Phone tm);// 重定义
- ?
- void lookup2(Phone& ph);
- void lookup2(const Phone& ph);// 重载
- ?
- void lookup3(Phone* ptr);
- void lookup3(const Phone* ptr);// 重载
- ?
- void lookup4(Phone* ptr);
- void lookup4(Phone* const ptr);// 重定义
形参与 const 形参的等价性仅适用于非引用形参, 也就说对于引用和指针来讲,
const 形参与非 const 形参可用于实现函数重载, 具体情况如下:
(1) 有 const 引用形参的函数与有非 const 引用形参的函数是不同的.
(2) 有指向 const 类型的指针形参的函数, 与带有指向相同类型的非 const 对象的指针形参的函数不同.
(3) 不能基于指针本身是否为 const 来实现函数重载. 因为 const 修饰指针本身, 而不是修饰指针所指向的类型.
3. 注意区分指针常量和常量指针
- const int* ptr;// 常量指针
- int const* ptr2;// 常量指针
- int* const ptr3 = NULL;// 指针常量
常量指针: 指针所指向的对象为常量, 不允许修改.
指针常量: 指针本身为常量, 指针的值不允许修改, 即不能再指向其他的地址.
来源: http://www.bubuko.com/infodetail-3498871.html