实验三 报告 继承和派生类

  • 格式:doc
  • 大小:39.00 KB
  • 文档页数:2

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

#include <iostream.h>
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="<<a<<endl; } //语句9 public:
int b;
};
void main()
{
B bb; //语句1
bb.seta(6); //语句2
bb.setb(3); //语句3
bb.show(); //语句4
cout<<"A::a="<<bb.a<<endl; //语句5
cout<<"B::b="<<bb.b<<endl; //语句6
cout<<"A::a="<<bb.geta()<<endl; / /语句7
cout<<"B::b="<<bb.getb()<<endl; //语句8 }
按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。

(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 <iostream.h>
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<length;i++)
{
cin>>*(alist+i);
}
}
void MyArray::Display()
{
for(int j=0;j<length;j++)
{
cout<<" "<<*(alist+j);
}
cout<<endl;
}
class SortArray:virtual public MyArray //排序{
public:
SortArray(int leng):MyArray(leng)
{
}
void paixu();
};
void SortArray::paixu()
{
for(int i=0;i<length;i++)
{
for(int j=i;j<length;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<length/2;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<length;i++)
{
sum+=*(alist+i);
}
int ave=sum/length;
cout<<"average is"<<ave<<endl;
}
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();
}。