多继承,多态,虚函数
考虑如下程序,试回答问题:
#include<iostream.h>
class A
{
public:
virtual ~A(){cout << "A destructor..." << endl;}
virtual void func(){cout<<"A func....."<<endl;}
};
class B
{
public:
virtual ~B(){cout << "B destructor..." << endl;}
virtual void func(){cout<<"B func...."<<endl;}
};
class C:public A,public B
{
public:
virtual ~C(){cout << "C destructor..." << endl;}
virtual void func(){cout<<"C func...."<<endl;}
};
void main()
{
B *p=new C; //注意基类指针非A类
p->func();
delete p;//此处调用,需要上述类虚析构才能正确实现
}
1) 第一次对比分析:
l 该程序将输出什么内容?
l 将L23处换成A *p = new C; 程序将如何?
2) 第二次对比分析:
l 若上述代码中L5,L11,L17此三处virtual去掉,L23如原题程序将如何?尝试分析原因
l 保留上述修改,将L23处换成A *p = new C; 程序将如何?
3) 第三次对比分析:
l 若只去掉L11,L17两处的virtual,仍保留L5的virtual,L23如原题,B和C类的析构函数是否为虚?程序将如何?
l 若只去掉L11,L17两处的virtual,仍保留L5的virtual,将L23处换成A *p = new C; B和C类的析构函数是否为虚?程序将如何?
4)通过此题对比分析,得到什么样的结论?