一、实验目的
1) 理解类的继承的概念,能够定义和使用类的继承关系。
2) 掌握派生类的声明与定义方法。
3) 熟悉公有派生和私有派生的访问特性。
4) 学习虚基类在解决二义性问题中的作用。
二、实验内容
1) 定义一个基类MyArray,基类中可以存放一组整数。
class MyArray
{
public:
MyArray(int leng);
~MyArray();
void Input();
void Display();
protected:
int *alist; //指向动态申请的一组空间
int length; //整数的个数
};
基类中有构造函数、析构函数、输入数据和输出数据的函数。
2) 定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。
3) 定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。
4) 定义一个类AverArray继承自MyArray,在该类中定义函数Aver求解数组的平均值。
5) 定义NewArray类,同时继承了SortArray, ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。
(写出实验内容,实验步骤,主要程序代码,程序运行结果。)
- 定义一个基类MyArray,基类中可以存放一组整数。(基类中有构造函数、析构函数、输入数据和输出数据的函数)
#pragma once
#include
using namespace std;
class MyArray
{
public:
MyArray(int leng);
~MyArray();
void Input();
void Display();
protected:
int* alist; //指向动态申请的一组空间
int length; //整数的个数
};
#include "MyArray.h"
MyArray::MyArray(int leng)
{
length = leng;
alist = new int[leng];
}
MyArray::~MyArray()
{
delete[]alist;
}
void MyArray::Input()
{
cout << "请输入" << length << "个数:" << endl;
for (int i = 0; i < length;i++)
{
cin >> alist[i];
}
}
void MyArray::Display()
{
for (int i = 0; i < length ; i++)
{
cout << alist[i] << ' ';
}
}
- 定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。
#pragma once
#include "MyArray.h"
class SortArray :
public MyArray
{
public:
SortArray(int leng) :MyArray(leng)
{
};
void sort();
};
#include "SortArray.h"
void SortArray::sort()
{
//冒泡排序法
int i = 10;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10 - i; j++)
{
if (alist[j]
{
int temp;
temp = alist[j];
alist[j] = alist[j + 1];
alist[j + 1] = temp;
}
}
}
}
#include
#include "MyArray.h"
#include "SortArray.h"
using namespace std;
int main()
{
SortArray t(10);
t.Input();
t.sort();
cout << "从大到小排序为:" << endl;
t.Display();
return 0;
}
3) 定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。
#pragma once
#include "MyArray.h"
class ReArray :
public MyArray
{
public:
ReArray(int leng) :MyArray(leng)
{
};
void fanzhuan();
};
#include "ReArray.h"
void ReArray::fanzhuan()
{
int i = 0;
int j = (length - 1);
for (i; i < length / 2; i++)
{
int temp = *(alist + i);
*(alist + i) = *(alist + length - i - 1);
*(alist + length - i - 1) = temp;
}
}
#include
#include "ReArray.h"
using namespace std;
int main()
{
ReArray t(10);
t.Input();
t.fanzhuan();
cout << "反转后:" << endl;
t.Display();
return 0;
}
- 定义一个类AverArray继承自MyArray,在该类中定义函数Aver求解数组的平均值。
#pragma once
#include "MyArray.h"
class AverArray :
public MyArray
{
public:
AverArray(int leng) :MyArray(leng)
{
};
void aver();
};
#include "AverArray.h"
void AverArray::aver()
{
int sum = 0;
int mean;
for (int i = 0; i < length; i++)
{
sum += alist[i];
}
mean = sum / length;
cout << "平均数为:" << mean << endl;
}
#include
#include "AverArray.h"
using namespace std;
int main()
{
AverArray t(10);
t.Input();
t.aver();
return 0;
}
5) 定义NewArray类,同时继承了SortArray, ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。
#pragma once
#include "SortArray.h"
#include "AverArray.h"
#include "ReArray.h"
class NewArray :
public SortArray,public ReArray,public AverArray,public MyArray
{
public:
NewArray(int leng) :SortArray(leng), ReArray(leng), AverArray(leng), MyArray(leng)
{
};
};
#include
#include "AverArray.h"
#include "NewArray.h"
using namespace std;
int main()
{
NewArray t(10);
t.aver();
t.sort();
t.fanzhuan();
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)