内容正文:
类的继承与派生
面向对象程序设计的主要特征之一是继承。在程序开发中,一些类的数据成员和成员函数的内容基本或者相当一部分相同,在建立新类时,就可以继承原有类的相同或者相似部分,再加入自己的新内容,实现代码重用,减少重复的工作量,提高软件开发效率。
派生类继承的基类数据成员的初始化工作是在派生类中实现的。派生类对象建立时,系统调用派生类构造函数,在执行派生类构造函数前,先调用基类构造函数以及子对象构造函数,再执行派生类构造函数。
系统调用析构函数的顺序与调用构造函数的顺序正相反。
由于C++语言允许派生类的多重继承,造成派生类继承的相同基类数据成员的副本可能有若干份,C++系统提供了虚基类的方法来解决这个问题。
目录
第8章
C++程序设计案例教程
8.1 创建派生类
软件开发中,不同的类中的数据成员和成员函数的内容可能不同,也可能相似。如果新建一个类,其部分数据成员或者成员函数内容已经在已有的其他类中存在,就可以采用继承的方式使得已经存在的成员成为自己的一部分,再加上新的内容即可。继承过程中,原有的类称为“基类(base class)”或者“父类(father class)”,新建的类称为“派生类(derived class)”或者“子类(son class)”。
目录
第8章
C++程序设计案例教程
8.1.1 派生类的定义
Add your text in here
Click to add Text
在简单图形系统中定义类图形
案例引入
定义一个基类Graph和派生类Rectangle,其中,主函数内Rectangle对象调用Graph成员函数和Rectangle成员函数。
目录
第8章
C++程序设计案例教程
8.1.1 派生类的定义
源代码展示
#include <iostream>
using namespace std;
//定义基类
class Graph
{
protected:
int g1,g2;
public:
void getValue()
{
cout<<"Please input numbers to g1 and g2:"<<endl;
cin>>g1>>g2;
}
void display()
{
cout<<"g1="<<g1<<" ,g2="<<g2<<endl;
}
};
……
目录
第8章
C++程序设计案例教程
8.1.1 派生类的定义
运行结果
目录
第8章
C++程序设计案例教程
8.1.1 派生类的定义
程序分析
目录
第8章
C++程序设计案例教程
知识讲解
派生类声明的方式
派生类的构成
假定已经存在一个基类,在此基础上通过继承建立一个派生类,声明的方式如下:
class 派生类名:[继承方式] 基类名
{
派生类新增的成员
};
继承的方式包括public(公有的)、private(私有的)和protected(受保护的)。继承方式是可选的,如果不写此项,则系统默认为private。
在为派生类选择基类时,应尽量使冗余量最小。派生类虽然从基类接受了所有的成员,但并非可以访问所有成员,因为不同的继承方式使基类的成员到派生类后访问属性发生了变化。
如果派生类新增的成员函数与继承的成员函数不仅同名,而且函数的参数表也完全相同,即非函数重载,则派生类新增的成员函数将覆盖继承的成员函数。
目录
第8章
C++程序设计案例教程
8.1.2 派生类成员的访问属性
Add your text in here
Click to add Text
通过为基类成员定义不同的访问属性,
了解访问基类成员的方式
案例引入
在基类中定义3种不同访问属性的成员,在派生类成员函数内或通过派生类对象调用这些基类成员,观察其区别。
目录
第8章
C++程序设计案例教程
8.1.2 派生类成员的访问属性
源代码展示
#include <iostream>
using namespace std;
class Graph
{
private:
int g1,g2;
protected:
int g3,g4;
public:
int g5,g6;
void getValue()
{
cout<<"Input private data g1 and g2"<<endl;
cin>>g1>>g2;
cout<<"Input protected data g3 and g4"<<endl;
cin>>g3>>g4;
cout<<"Input public data g5 and g6"<<endl;
cin>>g5>>g6;
cou