源码
using namespace std;class Parent1
{
public:
Parent1() {
cout << "Parent1()..." << endl;
func();
}
virtual void func() {
cout << "Parent1->func()..." << endl;
}
virtual ~Parent1() {
cout << "~Parent1()..." << endl;
}
private:
int a;
};class Parent2
{
public:
Parent2() {
cout << "Parent2()..." << endl;
func();
}
virtual void func() {
cout << "Parent2->func()..." << endl;
}
virtual ~Parent2() {
cout << "~Parent2()..." << endl;
}
private:
int b;
};class Child :public Parent2, public Parent1
{
public:
Child():Parent2(), Parent1(){
cout << "Child()..." << endl;
func();
}
virtual void func()
{
cout << "Child-func() ..." << endl;
}
~Child() {
cout << "~Child()..." << endl;
}
private:
int c;
};
void test()
{
Parent1 * p = new Child;p->func(); //没有多态
delete p; //正常delete 没有问题
Parent2 *p2 = new Child;
p2->func();delete p2; //delete p2 ;; p2.~, free(p2) delete Child, Child.~, free(child)
}int main(void)
{
test();return 0;
输出结果: