/* 派生类与基类 1 派生类的数据大小 (1) 基类 - 结构体 (2) 派生类 - 结构体套结构体 2 顺序问题: (1) 构造与析构: 基类先构造,后析构。派生类,先析构,后构造。 (2) 原因: 依赖关系, 派生类使用基类的数据,所以基类先构造。 3 三种权限: 访问限制 三种地方访问: 本类、派生类、类外 (1) private 本类可以访问 (2) protected: 基类和派生类可以访问 (3) public: 任意地方都可以访问 4 调用 (1) 基类的成员函数无法使用派生类的成员变量和成员函数 (2) 在继承允许的情况下, 派生类可以调用基类的成员变量和成员函数 (a) 允许派生类对基类同名的成员变量和成员函数进行重写 (b) 允许派生类成员函数通过基类名::成员函数/成员变量方式,使用基类的成员变量和成员函数。 (c) 允许派生类对象通过对象名.基类名::成员函数/成员变量方式,使用基类的成员变量和成员函数。 5 赋值 (1) 派生类对象(结构体)可以直接赋值给基类对象(结构体), 反之则不行。 (2) 原因: 派生类对象的数据(成员变量)>=基类对象的数据(成员变量), 反之则是<=。 (1) 派生类对象(指针)可以直接赋值给基类对象(指针), 反之则不行。 (2) 原因: 派生类的数据(成员变量)可以调用基类的成员函数,反之则无法实现。 */
// 三种继承
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
1. 公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
2. 私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
3. 保护继承(protected)
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
public | protected | private | |
共有继承 | public | protected | 不可见 |
私有继承 | private | private | 不可见 |
保护继承 | protected | protected | 不可见 |
/* 继承: 1 基类和派生类的数据大小, 2 数据结构和内存分布。 */