实验六继承与派生之欧阳光明创编

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

继承与组合

欧阳光明(2021.03.07)

一、实验目的

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..."<

private:

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..."<

void Add(int x1,int y1,int x2,int y2)

{

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..."<

private:

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..."<

class D:public C,public virtual A{

public:

D(int a,int b,int c):C(a,b,c),A(c){ cout<<"D constructor..."<

};

int main()

{

D d(7,8,9);

d.f();

d.display();

return 0;

}

(3)程序运行结果:

A constructor (9)

A constructor (9)

B constructor (9)

C constructor...

D constructor...

12 12 11

destructor D...

destructor B...

destructor A...

destructor A...

(4)

#include

using namespace std;

class Base1

{

public:

Base1()

{

cout<<"class Base1!"<

}

};

class Base2

{

相关文档
最新文档