C++明天考试,复习一波
重载的作用域
我们参考下C++primer上的例子
string read();
void print(const string&);
void print(double);
void fooBar(int ival)
{
bool read = false;
string s = read();
void print(int);
print("Value: "); //错误
print(ival); //正确,调用print(int)
print(3.14); //正确,仍然调用print(int)
}
源码
// 01Funs.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream.h"
//重点关注C++三个函数特点
//1. overloading(重载),同名函数,不同参数
void fun(int i){}
void fun(int i,int j){}
//备注:在类内部,最常见的重载出现形式是构造函数
//问题1:是否可以使用返回值来区分两个同名函数?
//问题2:析构函数会重载吗?
//2. default parameter
void fun2(int i,int j=10,int m=20){}
//备注:默认参数要放到参数列表最后的位置
//注意:默认参数在函数声明和定义中,只能出现一处
//问题1:从构造函数角度,应该使用默认参数还是重载?
//3. 占位参数 为未来的版本预留的参数
void fun3(int){}
//可以使用占位参数作为区分两个同名、同参但不同意义的函数
//运算符重载中,i++和++i是一个典型应用
int main(int argc, char* argv[])
{
return 0;
}
overloading
问题1:是否可以使用返回值来区分两个同名函数?
不能。
int fa()
{
return 1;
}
double fa()
{
return 1.0;
}
编译器会提示
[Error] ambiguating new declaration of ‘double fa()’
问题2:析构函数会重载吗?
不会。因为析构函数只有唯一一个,并且不含参数。
default parameter
具体来说,“默认参数在函数声明和定义中,只能出现一处”是指每个参数只能出现一些默认值。但是可以分成几次定义。每次都需保证该参数右边都已经有默认值。
问题1:从构造函数角度,应该使用默认参数还是重载?
默认参数。因为默认参数更为灵活。