实验六-继承与派生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六-继承与派生
继承与组合
一、实验目的
1.了解继承在面向对象程序设计中的重要作用。2.进一步理解继承与派生的概念。
3.掌握通过继承派生出一个新的类的方法。4.了解虚基类的作用和用法。
5.掌握类的组合
二、实验内容
1.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。
(1)
#include
using namespace std;
class A
{public:
A(){cout<<"A::A() called.\n";}
virtual ~A(){cout<<"A::~A() called.\n";}
};
class B:public A
{public:
B(int i)
{ cout<<"B::B() called.\n";
buf=new char[i];
}
virtual ~B()
{ delete []buf;
cout<<"B::~B() called.\n";
}
private:
char *buf;
};
void fun(A *a)
{ cout<<"May you succeed!"< delete a; } int main() { A *a=new B(15); fun(a); return 0; } 1、 (1)程序运行结果: A::A() called. B::B() called. May you succeed! B::~B() called. A::~A() called. (2) #include using namespace std; class A{ public: A(int a,int b):x(a),y(b){ cout<<"A constructor..."< void Add(int a,int b){ x+=a;y+=b;} void display(){ cout<<"("< ~A(){cout<<"destructor A..."< int x,y; }; class B:private A{ private: int i,j; A Aobj; public: B(int a,int b,int c,int d):A(a,b),i(c),j(d) ,Aobj(1,1){ cout<<"B constructor..."< { A::Add(x1,y1); i+=x2; j+=y2; } void display(){ A::display(); Aobj.display(); cout<<"("< } ~B(){cout<<"destructor B..."< int main() { B b(1,2,3,4); b.display(); b.Add(1,3,5,7); b.display(); return 0; } (2)程序运行结果: A constructor... A constructor... B constructor... (1,2) (1,1) (3,4) (2,5) (1,1) (8,11) destructor B... destructor A... destructor A... (3) #include using namespace std; class A{ public: A(int a):x(a){ cout<<"A constructor..."< int f(){return ++x;} ~A(){cout<<"destructor A..."< int x; }; class B:public virtual A{ private: int y; A Aobj; public: B(int a,int b,int c):A(a),y(c),Aobj(c){ cout<<"B constructor..."< int f(){ A::f(); Aobj.f(); return ++y; } void display(){ cout< ~B(){cout<<"destructor B..."< }; class C:public B{ public: C(int a,int b,int c):B(a,b,c),A(0){ cout<<"C constructor..."< };