按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。
(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;jif(*(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();
}