C++实验:派生与继承

C++实验:派生与继承,第1张

C++实验:派生与继承

一、实验目的

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类的对象同时具有排序、逆转和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。

(写出实验内容,实验步骤,主要程序代码,程序运行结果。)

  1. 定义一个基类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] << ' ';

    }

}

  1. 定义一个类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;

}

  1. 定义一个类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;

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4994106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存