读书人

请问一下父类虚函数如果有重载子类

发布时间: 2013-10-04 21:41:43 作者: rapoo

请教一下,父类虚函数如果有重载,子类必须全部重写吗?

class Parent
{
public:
virtual void Method(void){}
virtual void Method(int i){}
};

class Child : public Parent
{
public:
virtual void Method(int i){}
};

int main(void)
{
Child *child = new Child();
child->Method(); //这里会报参数过少的错误
((Parent *)child)->Method(); //这样就没问题
return 0;
}


代码如上,如果Parent只有一个Method方法,Child即便不重写也不会出错
但一旦重写了那个带参数的,子类对象就找不到另一个没参数的了
请问c++是有这样的规定吗? 虚函数?重载?继承
[解决办法]
子类里 public 段加一句 using Parent::Method; 就可以找到了。
[解决办法]
如果基类声明被重载了,则应该在派生类中重新定义所有的基类版本。
如果在派生类中只重新定义一个版本,其他版本将会被隐藏,派生类对象将无法使用它们。
简而言之,重新定义函数,并不是重载。在派生类中定义函数,将不是使用相同的函数特征标覆盖基类声明,而是隐藏同名的基类方法,不管参数的特征标如何。
这些在C++Primer Plus中都有非常详细的介绍

读书人网 >C++

热点推荐