目的: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++程序设计 继承与派生实验(二)”中,我们将深入探讨这三个关键知识点:类的派生与继承的概念、继承方式对成员访问权限的影响,以及虚基类的用法。 首先,让我们理解类的继承与派生。继承是面向对象设计...
从bicycle和motorcar派生出motorcycle,观察虚基类对继承的影响。 定义一个motorcycle的对象,分别调用run()和stop(),观察构造/析构函数的调用情况。 注意:构造函数和析构函数中均为cout语句,说明哪个构造/析构...
在C++编程语言中,继承和派生是面向对象编程的重要概念,它们允许我们构建复杂、层次化的类结构,实现代码的复用和扩展。本章主要讲解了以下几个知识点: 1. **类的继承**:继承是创建新类(派生类)的过程,这个新...
"C++面向对象程序设计习题继承与派生.pdf" 继承是面向对象程序设计中的一种重要机制,它允许一个类继承另一个类的属性和行为特征。通过继承,新类可以从现有类中获得特征,从而达到代码复用的目的。在C++中,继承...
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖...
《C++语言程序设计——实训教程》是一本专为初学者和在校大学生设计的实践导向教程,旨在通过实例和练习帮助读者深入理解C++编程语言。C++是一种强大的、通用的编程语言,它继承了C语言的高效性,并引入了面向对象...
讲述在c++中关于继承与派生的基础方法,用于初学者进行学习
《C++语言描述——数据结构算法与应用》是一本深入探讨C++编程语言在数据结构和算法应用方面的专业书籍。本书旨在帮助读者理解和掌握如何利用C++高效地实现各种数据结构和算法,从而提升编程技能和解决问题的能力。...
C++作为一门强大的面向对象编程语言,其核心概念之一就是继承与派生。这两个概念是实现代码复用和构建复杂对象模型的关键技术。继承允许创建一个新的类(派生类),它不仅包含原有类(基类)的特性,还能增加新的...
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖...
《C++程序设计教程——设计思想与实现习题代码答案》是一本面向初学者和有一定基础的程序员的教育性资源,旨在帮助读者深入理解和掌握C++编程语言。这本书结合了作者两年的教学实践经验,使得内容既理论严谨又贴近...
实验报告的主题是“C++实验五 继承与派生的应用”,主要涵盖了C++面向对象编程中的核心概念,包括继承和派生。本实验旨在帮助学生深入理解和掌握以下几个关键知识点: 1. **继承和派生的含义**:继承是面向对象编程...
C++是一种广泛应用于系统软件、应用软件、游戏开发、嵌入式系统以及各种复杂软件工程的语言,由Bjarne Stroustrup在1983年为改进C语言而设计。本实训教程旨在深入浅出地教授C++编程,帮助学习者掌握C++的基础语法、...
### C++继承与派生机制详解 #### 一、引言 C++ 是一种支持面向对象编程的语言,其中继承机制是其重要的特性之一。通过继承,可以创建一个新类(称为派生类或子类),它继承了现有类(称为基类或父类)的所有属性和...
数据结构C++语言描述——应用标准模板库
《C/C++语言硬件程序设计——基于TMS320C5000系列DSP》是一本深入探讨如何使用C和C++编程语言进行数字信号处理(DSP)的专著,特别关注德州仪器(TI)的TMS320C5000系列 DSP 芯片。该书涵盖了从基础概念到高级应用的...
c++继承与派生习题答案 c++继承是面向对象编程(OOP)的一个基本概念,它允许一个类继承另一个类的成员变量和成员函数,从而实现代码的重用和继承。以下是c++继承与派生习题的答案: 1.概念填空题 1.1 三种派生...
在C++编程语言中,继承和多态是面向对象编程(OOP)的两大核心概念。这个名为“C++经典实例——体现继承和多态”的资源显然是为了帮助开发者深入理解和应用这两个关键特性。下面我们将详细探讨这两个主题以及它们在...
《数据结构与程序设计——C++描述》是高等教育出版社出版的一本教材,由Bobert L. Kruse和Alexander J. Ryba共同编写。这本书深入探讨了如何使用C++语言进行数据结构的实现和程序设计,旨在帮助学生和程序员掌握数据...