我在玩c++规则。我遇到了一个错误,但我无法解释。请帮助解释为什么会发生编译错误。顺便说一句,我对解决这个问题并不感兴趣。谢谢
Q1 为什么名称隐藏在这种情况下不起作用?例如,如果我们删除 lineA 的关键字 virtual。编译将起作用
Q2在case2中添加一个函数后,编译通过。
请帮助解释 Q1 和 Q2。
#包括
using namespace std;
class base
{
public:
virtual int func() // lineA
{
cout << "vfunc in base class\n";
return 0;
}
};
class derived: public base
{
public:
double func()
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
return 0;
}
输出:
main.cpp:18:14: error: conflicting return type specified for 'virtual double derived::func()'
double func()
^
main.cpp:8:19: error: overriding 'virtual int base::func()'
virtual int func()
案例2:
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class\n";
return 0;
}
// new added
virtual double func(int)
{
return 0.0;
}
};
class derived: public base
{
public:
double func(int)
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
return 0;
} ^