(1.)C++支持多继承,即一个子类 可以 同时继承两个或以上父类。
class Derived : access-specifier Base1, access-specifier Base2{};
(2.)单个类内的public、private、protected成员访问范围:
public成员——类内可访问、派生类可访问、类实例可访问
protected成员——类内可访问、派生类可访问(public/protected继承的派生类) [友元类也可访问]
private成员——类内可访问
(3.)基类包含重载构造函数(需要传参),创建派生类对象时,如何实例化基类?
——初始化列表,派生类构造函数 调用 合适的基类构造函数。
class Base{
pubilc:
Base(int someNumber);
};
class Derived: public Base{
public:
Derived():Base(25);
};
(4.)基类的某函数 被派生类同名函数覆盖,在main里,派生类对象调用基类的函数,需要以“基类名::函数”方式调用。
调用格式“派生类对象.基类名::函数”
(5.)构造顺序:先 实例化基类对象 > 再 实例化派生类对象;先 实例化成员属性 > 再 调用构造函数。
析构顺序:正好相反。
基类成员属性>基类构造函数>派生类成员属性>派生类构造函数
>派生类析构函数>派生类成员属性析构>基类析构函数>基类成员属性析构
(6)无论是私有继承还是保护继承:基类的公有和保护成员,只能被派生类使用,派生类实例 无法使用。
私有继承:
class B : private A{};
class C : public/protected/private B{}; 则C不能访问A里的公有成员。
保护继承:
class B : protected A{};
class C : protected B{}; 则C可以访问A里的公有和保护成员。
【尽量不要用私有继承和保护继承,更好的做法是把基类对象作为派生类的一个成员属性。】
(7)切除:把派生类实例 复制/赋值给 基类实例,编译器只复制派生类里基类的部分。
(8)禁止继承:被声明为final的类 不能作为基类被继承。
class B final : public A{}; 则B不可再做基类