图书管理系统结束了,我们也迎来了我们的新内容—继承部分的学习。
谈到继承,首先想到了它的定义——在已有类的基础上创建新类的过程。已有类我们称它为基类(或父类),而新类我们称它为派生类(或子类)。类的继承关系的语法形式:
Class 派生类:基类名
{
数据成员和成员函数声明
};
基类名表 构成
访问控制 基类名 ,访问控制 基类名 ,……访问控制 基类名。
访问控制 表示派生类对基类的继承方式,使用关键字:
Public 公有继承
Private 私有继承
Protected 保护继承(不论那种方式继承基类,派生类都不能直接使用基类的私有成员)
派生类的生成过程经历的三个步骤:
1. 吸收基类成员(全部吸收(构造、析构除外)但一定可见)
2. 改造基类成员
3. 添加派生类新成员
#include<iostream>
using namespace std;
class A
{ public:
int a;
int b;
private:
int c;
protected:
int d;
};
class B:public A
{ int c;};
int main()
{ cout<<"size of A is"<<sizeof(A);
cout<<"size of B is"<<sizeof(B);}
结果为:
16
20
此代码就可以说明三种继承方式的区别与用法。
如果派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽基类的同名成员。
基类的初始化:
在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据。派生类构造函数声明为: 派生类构造函数(变元表):基类(变元表),对象成员1(变元表)……对象成员n(变元表);
构造函数执行顺序:基类——对象成员——派生类。
派生类构造函数和析构函数的使用规则:
1.基类的构造函数和析构函数不能被继承
2.如果基类没有定义构造函数或有无参的构造函数,派生类也可以不用定义构造函数
3.如果基类无无参的构造函数,派生类必须定义构造函数
4.如果派生类的基类也是派生类,则每个派生类只负责直接基类的构造
5.派生类是否定义析构函数与所属的基类无关。
派生类构造函数的一般格式为:
派生类::派生类名(参数总表):基类名(参数表)
{
//派生类新增成员的初始化语句
} 注意:这是基类有构造函数且含有参数时使用