Inheritance

终于写到了C++第二牛逼的特性:继承

要明确一个观点: 继承代表的关系是 "is-a",在类中将另一个类作为成员代表的关系是"has-a"

因此,composition 和 inheritance 是两种不同的重用方式

B 继承自 A,首先先将A copy一份,然后填上B特有的东西

基础

class X{
  int i;
public:
    X(){ i = 0;}
    void set(int ii){ i = ii};
};

class Y : public X{
    int i;
public:
    Y(){i = 0;}
}

Y对X进行了继承,意味着Y将包含X中的所有成员变量和成员函数

派生类可以直接访问基类的所有公有函数

[!TIP|style:flat|label:派生类可以做的:]

可以增加新的成员变量和成员函数

可以重新定义基类中已有的成员函数

可以改变现有成员的属性

关于访问控制

  • 系统默认为私有继承
  • private成员在派生类中不可访问
  • public成员在派生类中的访问属性和继承方式相同
  • protected成员和继承方式取最小访问权限

Name Hiding

派生类对基类的成员函数进行重载,在得到的派生类中所有其他版本的同名成员函数都被隐藏

继承了什么

不能继承的有 1.构造和析构函数 2.operator = 3.类中的private成员

进阶

向上类型转换 (Upcasting)

student继承自person,所以所有person能在的位置,都可以放进去一个student,因为student is a person,这就叫向上类型转换

指针和引用也可以被派生类所替代

但是 向上类型转换会损失对象的类型信息,因此调用函数会直接调用基类的函数,有些时候我们并不希望这样,因此引入了C++最后一个牛逼的特性 多态

Copyright all right reserved,powered by Gitbook该文件修订时间: 2020-08-30 22:58:59

results matching ""

    No results matching ""