实验三 报告 继承和派生类

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

实验三继承和派生类1.调试下列程序,并对程序进行修改后再调试,指出调试中的出错原因。

#include

class A

{

public:

void seta(int i)

{ a=i; }

int geta()

{ return a; }

public:

int a;

};

class B:public A

{

public:

void setb(int i)

{ b=i; }

int getb()

{ return b; }

void show()

{ cout<<"A::a="<

int b;

};

void main()

{

B bb; //语句1

bb.seta(6); //语句2

bb.setb(3); //语句3

bb.show(); //语句4

cout<<"A::a="<

cout<<"B::b="<

cout<<"A::a="<

cout<<"B::b="<

按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。

(1)将派生类B的继承方式改为private时,会出现哪些错误和不正常现象?为什么?

(2)将派生类B的继承方式改为protected时,会出现哪些错误和不正常现象?为什么?

(3)将派生类B的继承方式恢复为public后,再将类A中数据成员a的访问权限改为private时,会出现哪些错误和不正常现象?为什么?

(4)派生类B的继承方式仍为public,将类A中数据成员a的访问权限改为protected时,会出现哪些错误和不正常现象?为什么?

2.定义一个基类MyArray,基类中可以存放一组整数。

class MyArray

{

public:

MyArray(int leng);

~MyArray();

void Input();

void Display();

protected:

int *alist; //指向动态申请的一组空间

int length; //整数的个数

};

基类中有构造函数、析构函数、输入数据和输出数据的函数。

设计主函数对所定义的类进行调试。下同。

3.定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。

4.定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。

5.定义一个类AverArray继承自MyArray,在该类中定义函数Aver求解数组的平均值。

6.定义NewArray类,同时继承了SortArray, ReArray 和AverArray,使得NewArray类的对象同时具有排序、逆转和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。

#include

class MyArray

{

public:

MyArray(int leng)

{

length=leng;

alist=new int[length];

}

~MyArray()

{

delete alist;

}

void Input();

void Display();

protected:

int *alist; //指向动态申请的一组空间

int length; //整数的个数

};

void MyArray::Input()

{

for(int i=0;i

{

cin>>*(alist+i);

}

}

void MyArray::Display()

{

for(int j=0;j

{

cout<<" "<<*(alist+j);

}

cout<

}

class SortArray:virtual public MyArray //排序{

public:

SortArray(int leng):MyArray(leng)

{

}

void paixu();

};

void SortArray::paixu()

{

for(int i=0;i

{

for(int j=i;j

if(*(alist+i)>*(alist+j))

{int a;

a=*(alist+i);

*(alist+i)=*(alist+j);

*(alist+j)=a;

}

}

Display();

}

class ReArray:virtual public MyArray //翻转{

public:

ReArray (int leng):MyArray(leng)

{

}

void fanzhuan();

};

void ReArray::fanzhuan()

{ int i=0;

int j=(length-1);

for(i;i

{

int tem=*(alist+i);

*(alist+i)=*(alist+length-i-1);

*(alist+length-i-1)=tem;

}

Display();

}

class AverArray:virtual public MyArray //平均值

{

public:

AverArray(int leng):MyArray(leng)

{

}

void pingjun();

};

void AverArray::pingjun()

{ int sum=0;

for(int i=0;i

{

sum+=*(alist+i);

}

int ave=sum/length;

cout<<"average is"<

}

class NewArray:public SortArray,public ReArray,public AverArray

{

public: NewArray(int leng):SortArray(leng),ReArray(leng),AverArray(leng),My Array(leng)

{

}

};

void main()

{

NewArray aa(5);

aa.Input();

aa.Display();

aa.paixu();

aa.fanzhuan();

aa.pingjun();

}

相关文档
最新文档