为什么派生类中的重写函数隐藏基类的其他重载?考虑一下守则:#include <stdio.h>class Base {public:
virtual void gogo(int a){
printf(" Base :: gogo (int) \n");
};
virtual void gogo(int* a){
printf(" Base :: gogo (int*) \n");
};};class Derived : public Base{public:
virtual void gogo(int* a){
printf(" Derived :: gogo (int*) \n");
};};int main(){
Derived obj;
obj.gogo(7);}得到了这个错误:>g++ -pedantic -Os test.cpp -o test
test.cpp: In function `int main()':
test.cpp:31: error: no matching function for call to `Derived::gogo(int)'
test.cpp:21: note: candidates are: virtual void Derived::gogo(int*)
test.cpp:33:2: warning: no newline at end of file
>Exit code: 1在这里,派生类的函数将使基类中所有同名函数(而不是签名函数)黯然失色。不知何故,C+的这种行为看起来不太好。不是多态。
4 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
gogo(int*)
using Base::gogo;
蛊毒传说
TA贡献1895条经验 获得超3个赞
从引用的类型开始,然后转到基类型,找到第一个类型,它有一个名为“gogo”的方法。 仅考虑那种类型上名为“gogo”的方法,就可以找到匹配的重载。
- 4 回答
- 0 关注
- 640 浏览
添加回答
举报
0/150
提交
取消