我试图了解继承, 这是一个例子:
int main(){
A *a = new C();
a->f();
}
class A {
public:
virtual void f()
{
cout << "f in A\n";
}
void g(){
cout << "g in A\n";
}};
class B: public A{
public:
void f(){
cout << "f in B\n";
this -> g();
}
void g() {
cout << "g in B\n";
}};
class C: public B{
public:
void g(){
cout << "g in C\n";
}};
结果将是:
f in B
g in B
但是如果将A :: g()更改为虚拟,结果将是:
f in B
g in C
我理解它首先进入A :: f()看到它的虚拟内容,所以它进入了B :: f() 但是,谁是“这个”? ... 为什么当我将virtual添加到A :: g()时没有注意到B :: g()不是虚拟的? “此”静态是B,动态是C吗?