以下代码有什么问题?
class B
{
public:
int test()
{
cout<<"B:test()"<<endl;
return 0;
}
int test(int i)
{
cout<<"B test(int i)"<<endl;
return 0;
}
};
class D: public B
{
public:
int test(char x) { cout<<"D test"<<endl; return 0; }
};
int main()
{
D d;
d.test();
return 0;
}
最佳答案
问题是名称隐藏。派生类 D
中的函数 test()
隐藏 基类
,因此表达式中的重载决议不会考虑这些:test()
的重载>B
d.test()
只需添加一个 using
声明:
class D: public B
{
public:
using B::test;
// ^^^^^^^^^^^^^^
int test(char x) { cout<<"D test"<<endl;}
};
另请注意,基类 B
中的 test()
重载应该返回 int
,但它们什么也不返回.
根据 C++11 标准的第 6.6.3/2 段,从返回值函数的末尾掉落而不返回任何内容是未定义的行为。
关于c++ - 派生带/不带参数的基类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17031179/