c++实验5_3继承与派生(3)

一、实验目的和要求

    1.  进一步熟悉继承关系。
    2. 理解类的访问控制与类的成员访问的关系。
    3. 熟悉不同继承方式下对基类成员的访问控制。
    4. 掌握利用虚基类解决二义性问题。

二、实验环境(软、硬件及条件)

一台安装有Visual C++ 6.0的计算机

三、实验步骤

二、实验内容

1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?改为保护类型呢?改变继承方式呢?

2.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycl)类、汽车(motorcar)类。自行车类有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。从和派生出摩托车(motorcycle)类,在继承过程中注意设置虚基类。如果不把vehice设置为虚基类,会有什么问题?并分析原因。

 

三、实验步骤

1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现错误提示。试着将age分别改为公有的、保护类型,再看看会有什么不同。试着在main函数中直接给age赋值,看看又会有什么问题?怎么才能避免这种问题的出现。深入认识三种访问控制的异同。

2.按任务2要求编写程序代码。分别测试vehicle定义为虚基类与非虚基类的情况。用debug跟踪基类和派生类的构造函数、析构函数的执行情况。

四、实验中遇到的问题及解决

五、实验结果及分析

1.

继承方式为公有时,age设为私有类型时不能直接赋值,因为不能访问。改为公有或保护类型,运行没有问题;

继承方式为保护时,age设为私有类型时不能直接赋值,因为不能访问。改为公有或保护类型,运行没有问题;

继承方式为私有时,age为何种形式都不能运行;

#include

using namespace std;

class Animal

{public:

int age;

};

class dog:public Animal

{public:

void SetAge(int n){age=n;cout<

};

void main()

{

dog d;

d.SetAge(5);

}

2.

#include

using namespace std;

class vehicle

{private:

int MaxSpeed,Weight;

public:

void Run(int m){MaxSpeed=m;cout<<"MaxSpeed="<

void Stop(int w){Weight=w;cout<<"Weight="<

};

class bicycle: virtual public vehicle

{private:

int height;

public:

void gf(int h){height=h;cout<<"height="<

};

class motorcar:virtual public vehicle

{private:

int SeatNum;

public:

void kf(int s){SeatNum=s;cout<<"SeatNum="<

};

class mootorcycle:public bicycle,public motorcar

{private:

int priece;

public:

void display(int p){priece=p;cout<<"priece="<

};

void main()

{mootorcycle l;

l.Run(20);

l.Stop(600);

l.gf(200);

l.kf(40);

l.display(5000);

}

若不把vehicle设为虚基类,设立mootorcycle的对象从而调用vehicle的成员函数回编译出错误,除非从motorcar和bicycle类入手。

 

 

你可能感兴趣的:(c++实验5_3继承与派生(3))