不同继承方式下对基类成员的访问控制和使用虚基类解决多重继承的二义性

  • 格式:doc
  • 大小:30.00 KB
  • 文档页数:2
计算机1307陈坤1305110094
};
class motorcycle:public bicycle,public motorcar
{
public:
motorcycle(){cout<<"motorcycle默认构造函数被调用"<<endl;}
~motorcycle(){cout<<"motorcycle析构函数被调用"<<endl;}
void stop(){cout<<"程序停止运行"<<endl;}
vehicl(){cout<<"vehicl默认构造函数被调用"<<endl;}
~vehicl(){cout<<"vehicl析构函数被调用"<<endl;}
};
class bicycle:public virtual vehicl
实验报告6
一、实验任务:
1、定义一个车(vehicl)基类,具有MaxSpeed、Weight等成员变量,run、stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicl设置为虚基类。否则会有什么问题?
二、实验步骤:
1、编写程序定义一个车(vehicl)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicl设置为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main中测试这个类。
2、编译成功后,把vehicl类设置为非虚基类,再编译一次,此时系统报错,无法编译成功。因为若不把vehicl类设置为虚基类,会出现二义性错误,程序不能成功编译。
};
void main()
{
vehicl v;
v.run();
v.stop();bicyLeabharlann le b;b.run();
b.stop();
motorcar r;
r.run();
r.stop();
motorcycle e;
e.run();
e.stop();
}
运行结果:
注:若把基类设置为非虚基类会出现二义性错误,程序不能成功编译!
{
public:
int h;
bicycle(){cout<<"bicycle默认构造函数被调用"<<endl;}
~bicycle(){cout<<"bicycle析构函数被调用"<<endl;}
};
class motorcar:public virtual vehicl
{
public:
int n;
motorcar(){cout<<"motorcar默认构造函数被调用"<<endl;}
三、本次实验难点:
在不同继承方式下对基类成员的访问控制和使用虚基类解决多重继承的二义性问题为本次实验的重点和难点,要在实验前后着重阐述。
源程序:
#include<iostream>
using namespace std;
class vehicl
{
public:
int v;
int m;
void run(){cout<<"程序开始运行"<<endl;}