#include <iostream>
#include<stdio.h>
using namespace std;
class A{
public:
A(){printf("A/n");}
~A(){"del A/n";}
};
class B{
public:
B(){printf("B/n");}
~B(){"del B/n";}
};
class C:public A,public B{
public:
C(){printf("C/n");}
~ C(){printf("del c/n");}
};
int main()
{
A *a = new C();
delete a;
return 0;
}
输出:
A
B
C
del A
/************************/
class A{
public:
void f(){printf("A/n");}
};
class B:public A{
public:
virtual void f(){printf("B/n");}
};
int main()
{
A* a = new B();
a->f();
return 0;
}
输出:
A
这道题令人大意的地方在于virtual修饰在派生类B的成员函数里面,所以用基类指针指向派生类的实例时,调用的还是基类版本的成员函数。