1. 成员函数被重载的条件有:
1) 相同的范围(在同一个类中);//同一层次 2) 函数名字相同; 3) 参数不同;
4) virtual关键字可有可无。 注意:重载不关心函数的返回值类型
① double calculate(double);
② double calculate(double,double);
③ double calculate(double, int);
④ double calculate(int, double);
⑤ double calculate(int);
⑥ float calculate(float);
⑦ float calculate(double);
2. 覆盖的条件有:
子类函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致
1) 不同的范围(分别位于派生类与基类);//不同层次,子内父外
2) 函数名字相同;
3) 参数相同;
4)返回值类型相同;
5) 基类函数必须有virtual关键字。
注:派生类虚函数覆盖基类虚函数+隐藏基类中所有其他重载函数
覆盖总包含了隐藏!!(满足前两点就能实现隐藏,再加后三点实现覆盖)
e.g., P264 8_4.cpp
3. 隐藏,非严格一致的覆盖。
指派生类的函数屏蔽了与其同名的基类函数,条件如下:
1) 不同的范围(分别位于派生类与基类);//不同层次,子内父外
2) 函数名字相同;
//以下三条有一条不符合者,皆为隐藏!
3) 参数相同;
4)返回值类型相同;
5) 基类函数必须有virtual关键字。
阻止了编译器继续向上查找函数的定义
e.g., p219, 7_4.cpp 隐藏非覆盖!父类指针作用域,相当于 基类::display();
p228, 7_7.cpp
转:
阅读(677) | 评论(0) | 转发(0) |