C++ 子类不能重载父类函数 解决方法
来源:互联网 发布:什么是淘宝实体店 编辑:程序博客网 时间:2024/06/11 18:31
C++ 子类不能重载父类函数 解决方法
#include <iostream>
using namespace std;
class B{
public:
int f(int i) { cout << "f(int): ";
return i+1;
}
// ...
};
class D : public B {
public:
double f(double d) {
cout << "f(double): ";
return d+1.3;
}
// ...
};
int main(){
D* pd = new D;
cout << pd->f(2) << '\n';
cout << pd->f(2.3) << '\n';
}
程序运行结果是:f(double): 3.3f(double): 3.6而不是某些人(错误地)猜想的那样:f(int): 3
f(double): 3.6
换句话说,在D和B之间没有重载发生。你调用了pd->f(),编译器就在D的名字域里找啊找,找到double f(double)后就调用它了。编译器懒得再到B的名字域里去看看有没有哪个函数更符合要求。记住,在C++中,没有跨域重载——继承类和基类虽然关系很亲密,但也不能坏了这条规矩。详见《The Design and Evolution of C++》或者《The C++ Programming Language》第三版。
不过,如果你非得要跨域重载,也不是没有变通的方法——你就把那些函数弄到同一个域里来好了。使用一个using声明就可以搞定。
class D : public B {
public:
using B::f;
// make every f from B available
double f(double d) {
cout << "f(double): ";
return d+1.3;
}
// ...
};
这样一来,结果就是f(int): 3 f(double): 3.6重载发生了——因为D中的那句 using B::f 明确告诉编译器,要把B域中的f引入当前域,请编译器“一视同仁”。#include <iostream>using namespace std;class B{ public: int f(int i) { cout << "f(int): "; return i+1; } // ... };class D : public B {public:double f(double d) { cout << "f(double): "; return d+1.3; } // ... };int main(){ D* pd = new D;cout << pd->f(2) << '\n';cout << pd->f(2.3) << '\n';return 0;}/*f(double): 3.3f(double): 3.6Press any key to continue*/
#include <iostream>using namespace std;class B{ public: int f(int i) { cout << "f(int): "; return i+1; } // ... };class D : public B {public:using B::f;double f(double d) { cout << "f(double): "; return d+1.3; } // ... };int main(){ D* pd = new D;cout << pd->f(2) << '\n';cout << pd->f(2.3) << '\n';return 0;}/*f(int): 3f(double): 3.6Press any key to continue*/
- C++ 子类不能重载父类函数 解决方法
- 子类重载父类的虚函数
- 子类、父类之间实现函数重载
- 子类重载父中的函数
- C语言使用技巧3:C++中子类调用父类重载函数的方法
- 在父类和子类中定义重载函数
- 在父类和子类中定义重载函数 心得
- java 子类重载父类
- JAVA 子类不能继承父类的构造函数
- 重载:子类方法访问属性不能比父类方法高
- 子类重载父类成员函数时父类的成员函数将隐藏
- C++父类子类间函数重定义,虚函数重写(覆盖)以及重载
- C++父类子类间函数重定义,虚函数重写(覆盖)以及重载
- c++ 子类“重载”父类的方法
- C/C++_两种函数不能重载的情况
- C++父类与子类关系以及函数重载、覆盖和隐藏规则
- C++父类与子类关系以及函数重载、覆盖和隐藏规则
- C++父类与子类关系以及函数重载、覆盖和隐藏规则
- JAVA中的Arrays类
- Android Animation
- Windows的第一个程序
- hibernate对象关系
- android开发案例之使用JSON数据向服务器提交和获取服务器传递的Json数据
- C++ 子类不能重载父类函数 解决方法
- 各种cache技术基本特性
- git使用总结
- 黑场信号
- C++万年历
- LCD中文字模编译前自动提取的方法
- 关于启联新平台专栏
- 一个成功的Git分支模型
- 图像处理的前景