目的:1学习定义和使用类的继承关系,定义派生类。
2熟悉不同继承方式下对基类成员的访问控制。
3学习利用虚基类解决二义性问题。
内容(算法、程序、步骤和方法):
1.定义一个基类animal,有私有整形成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看会出现什么问题,把改为公有成员变量,观察变化。
算法:根据要求定义基类和派生类,为了反映变化,在派生类中定义函数PrintAge()来输出值。
程序:
#include<iostream.h>
class animal
{
private:
int age;
};
class dog:public animal
{
public:
void setage(int n){age=n;}
void printage(){cout<<"age="<<age<<endl;}
};
void main()
{
dog dog1;
dog1.setage(5);
dog1.printage ();
}
定义一个基类BaseClass,有整形成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
算法:先定义如上所述的基类和派生类,为了显示构造函数和析构函数的执行情况,在这两个函数体内可以输出提示语句。
程序:
#include<iostream.h>
class BaseClass
{
private:
int Number;
public:
BaseClass(){cout<<"调用基类构造函数!"<<endl;}
~BaseClass(){cout<<"调用基类析构函数!"<<endl;}
};
class DerivedClass:public BaseClass
{
public:
DerivedClass(){cout<<"调用子类构造函数!"<<endl;}
~DerivedClass(){cout<<"调用子类析构函数!"<<endl;}
};
void main()
{
DerivedClass son;
}
3定义一个车基类,具有等成员变量,等成员函数,由此派生出自行车类和汽车类,自行车类具有高度等成员变量,汽车类具有座位数等成员变量,从自行车类和汽车类派生出摩托车类,在继承过程中观察把车类设为虚基类与不设的区别。
算法:根据题目描述,定义相应的类,为了显示变化,在摩托车类里面可定义一个函数来进行输出。
程序:
#include<iostream.h>
class vehicle
{
protected:
int MaxSpeed;
int Weight;
public:
vehicle(int s,int w){MaxSpeed=s;Weight=w;}
void SetMaxSpeed(int s){MaxSpeed=s;}
void SetWeight(int w){Weight=w;}
void Run(){cout<<"class vehicle is running!"<<endl;}
void Stop(){cout<<"class vehicle has stopped!"<<endl;}
};
class bicycle:virtual public vehicle
{
protected:
int Height;
public:
bicycle(int h,int s,int w):vehicle(s,w)
{Height=h;}
};
class motorcar:virtual public vehicle
{
protected:
int SeatNum;
public:
motorcar(int S,int s,int w):vehicle(s,w)
{SeatNum=S;}
};
class motorcycle:public bicycle,public motorcar
{
public:
motorcycle(ints,int w,int h,int S):vehicle(s,w),bicycle(h,s,w),motorcar(S,s,w){}
void Show()
{
cout<<"MaxSpeed:"<<MaxSpeed<<endl;
cout<<"Weight:"<<Weight<<endl;
cout<<"Height:"<<Height<<endl;
cout<<"SeatNum:"<<SeatNum<<endl;
}
};
void main()
{
motorcycle mc(150,200,15,3);
mc.Show();
}
结果及分析:
1此时出现问题如下:
error C2248: 'age' : cannot access private member declared in class 'animal'
分析:子类不能直接访问父类中的私有成员,把基类中的age改为公有成员后则我问题,执行结果如下:
2.执行结果:
分析:程序中先执行基类的构造函数,在调用子类的构造函数,而调用析构函数是则相反,即先调用子类的析构函数,然后调用基类的析构函数。
3执行结果:
如果不把车基类设为虚基类,则程序无发分别出摩托车类中所继承到的成员是继承自自行车类还是汽车类,这样就会出现二义性。
分享到:
相关推荐
c++程序设计 继承与派生实验(二) 1. 进一步掌握类的派生与继承的概念、应用方法 2. 掌握继承方式对成员访问权限的影响 3. 掌握虚基类的用法
C++程序设计讲义 继承与派生 教材:谭浩强版C++程序设计
从bicycle和motorcar派生出motorcycle,观察虚基类对继承的影响。 定义一个motorcycle的对象,分别调用run()和stop(),观察构造/析构函数的调用情况。 注意:构造函数和析构函数中均为cout语句,说明哪个构造/析构...
数据结构C++语言描述——应用标准模板库STL.PDF
C++语言程序设计——实训教程,有助于新手参考!有助于大学生实训课参考!
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖...
《C++语言描述——数据结构算法与应用》高清版
类的继承 类成员的访问控制 单继承与多继承 派生类的构造、析构函数 类成员的标识与访问
讲述在c++中关于继承与派生的基础方法,用于初学者进行学习
C++面向对象程序设计习题继承与派生.pdf
数据结构与程序设计——C++语言描述(答案解析) 英文版本 要的下!
Visual C++程序设计——基础与实例分析源代码
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖...
主要内容包括程序设计基础知识、类与对象的基本概念、继承与多态、输入输出流,以及泛型程序设计。此外,本教材还介绍了一些常用数据结构基础知识,使得读者学习本书后,能够解决一些简单的实际问题。整套教材语言...
《C++语言描述——数据结构算法与应用》高清版 经典的数据结构教材,第二版尚未在国内出版,与第一版区别主要是部分代码更新,但数据结构作为经典内容主干还是不变的 分栏的pdf,非影印扫描版,方便学习
C++继承与派生课件 很值得下载 C++继承与派生课件 很值得下载
C_C++语言硬件程序设计——基于TMS320C5000系列DSP
数据结构C++语言描述——应用标准模板库
C++实验五 继承与派生的应用 课程 实验报告 作业参考的良品!