同学之路——在路上

专业交流

导航

多继承,多态,虚函数

考虑如下程序,试回答问题:
#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         若上述代码中L5L11L17此三处virtual去掉,L23如原题程序将如何?尝试分析原因

l         保留上述修改,将L23处换成A *p = new C; 程序将如何?

3)       第三次对比分析:

l         若只去掉L11L17两处的virtual,仍保留L5virtualL23如原题,BC类的析构函数是否为虚?程序将如何?

l         若只去掉L11L17两处的virtual,仍保留L5virtual,将L23处换成A *p = new C; BC类的析构函数是否为虚?程序将如何?

     4)通过此题对比分析,得到什么样的结论?

 

posted on 2007-11-29 22:52  Camellia  阅读(247)  评论(1编辑  收藏  举报