先声明一个Array类,这个类有两个数据成员,一个是整形size,表示数组的大小,另一个是整形指针ptr,表示数组存放的起始地址。该类的声明和实现如下:
class Array
{
public:
Array(int); // default constructor
Array(const Array&); // copy constructor
~Array(); // destructor
void input(); //input numbers
int getSize() const; // return size
void display() const; //display array
protected:
int size; // pointer-based array size
int* ptr; // pointer to first element of pointer-based array
}; // end class Array
Array::Array(int s) {
size = s;
ptr = new int[s];
}
Array::Array(const Array& p) {
size = p.size;
ptr = new int[size];
for (int i = 0; i < size; i++) {
ptr[i] = p.ptr[i];
}
}
Array::~Array() {}
void Array::input() {
for (int i = 0; i < size; i++) {
cin >> ptr[i];
}
}
int Array::getSize() const {
return size;
}
void Array::display() const {
for (int i = 0; i<size; i++) {
cout << ptr[i] << " ";
}
cout << endl;
}
第二步,声明一个带有平均值数组AverArray类,继承于Array类,这个类多了一个数据成员average,类型为double用于记录该数组的平均值。另外再添加一个成员函数aver,用于求数组中数据的平均值,该类的声明和实现如下:
class AverArray :virtual public Array {
public:
AverArray(int n) :Array(n){}
void aver() {
double sum = 0;
for (int i = 0; i < size; i++) {
sum = sum + ptr[i];
}
average = sum / size;
}
double getAver() {
return average;
}
private:
double average;
};
这时就能通过AverArray调用Array里面的函数,而不用重新定义。
主函数部分如下:
int main()
{
AverArray integers1(7);
integers1.input();
cout << "Integers1:" << endl;
integers1.display();
integers1.aver();
cout << fixed << setprecision(2);
cout << "The average number of integers1 is " << integers1.getAver() << endl;
return 0;
}
最后由用户输入一段以空格分开的数字,就能输出平均值:
Integers1:
34 67 3 -6 667 3 45
The average number of integers1 is 116.14