Rob*_*iac 10 c++ inheritance virtual-functions class
我对继承方法的虚拟属性感到困惑.
假设我们有4个类:A类,B类,C类和D类.这些类是通过这种方式继承的:A - > B - > C - > D,其中A是基类.
到目前为止,我确信这一点:在基类(类A)中使用virtual开始类方法声明,使得方法对于从基类派生的所有类都是虚拟的,包括派生类的派生类.(B和C类方法确定为虚拟).
混乱就在这里.如果在基类A中没有任何虚拟成员,该怎么办?相反,我们可以说,B类声明了一种虚拟方法.我假设,此更改将使属于所有属于继承链(C和D类)的派生类的函数为虚拟.从逻辑上讲,B代表C和D,是一种"基类",对吧?还是我错了?
小智 17
你说的没错.
我认为在这种情况下,最好的解决方案是尝试:
#include <iostream>
using namespace std;
class A {
public:
void print(){ cout << "print A" << endl; };
};
class B: public A {
public:
virtual void print(){ cout << "print B" << endl; };
};
class C: public B {
public:
void print(){ cout << "print C" << endl; };
};
int main()
{
A *a = new C();
B *b = new C();
a->print(); // will print 'print A'
b->print(); // will print 'print C'
return 1;
}
Run Code Online (Sandbox Code Playgroud)
你是完全正确的.孩子继承了它的祖先所拥有的东西.基类不能继承子项具有的内容(例如新函数或变量).虚函数是函数,如果子类更改虚函数的实现,则子类可以覆盖这些函数,以便不调用基虚函数.
A是B,C,D的基类.B是C,D的基类,C也是D的基类.