C++简单继承问题,C++继承类的时候不是把虚函数也继承下来了吗?

class A
{
public:
virtual void out(int a){cout<<"A";}
};
class B:public A
{
public:
void out(){cout<<"B";}
};
int main()
{
B b;
b.out();
//b.out(1); 编译错误
}
为什么b没有out(int)的方法?没有重写或重定义吧
应该是问那个B中的out是重写还是重定义?

派生类重新定义继承的方法时不会发生重载,派生类定义了和基类同名的函数,将会隐藏基类的同名函数,而不管参数是否相同。也就是说,如果要重写继承来的方法,就要保证和基类方法的原型完全相同,如果基类有多个同名的重载方法,那么派生类要改写继承来的这些方法就必须每一个方法都重写才行(即使只改写一个,其他的也要抄一遍)

你这个例子中 void B::out()方法覆盖了void A::out(int), 所以b就没有out(int)这样的方法了,要么去掉void B::out(),要么再写一个void B::out(int)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-09
参数不一样,等于是两个不同函数。
class B:public A
{
public:
void out(int a){cout<<"B";}
};
要覆写应该这么做
第2个回答  2014-04-09
被重写了 方法是会被继承的 再B中已经重写了 所以你不能用之前A中的int方法
相似回答