前端学C++

141 阅读2分钟

这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

C++类继承

类继承对于类来说是个必要的特性,其对于面向对象的程序设计十分重要,在python与js中,我就接触并使用过类继承。在这些语言中,由于类继承的语法和思维都比较易懂,我并没有花太多的心思去钻研类继承的诸多细节。

在C++中,比如说有这样一个类:

class TableTennisPlayer { 
    private: 
        string firstname; 
        string lastname; 
        bool hasTable; 
    public: 
        TableTennisPlayer (const string & fn = “none", const string & ln = “none", bool ht = false); 
        void Name() const; 
        bool HasTable() const { 
            return hasTable; 
        }; 
        void ResetTable(bool v) { 
            hasTable = v; 
        }; 
};

要进行类继承(或称为类派生)很简单,只要

class RatedPlayer : public TableTennisPlayer { ... }

这样就ok了。这样的派生类天然具有父类的变量和方法。但是派生类有其自己的独立的构造与析构函数,并不依赖于父类。

关于派生类如何处理父类的变量,遵循一些权限原则,注意class RatedPlayer : public TableTennisPlayer { ... }中的public,这声明了继承的方式,三种继承方式和对应的变量权限如下:

public继承方式

  • 基类中所有 public 成员在派生类中为 public 属性;
  • 基类中所有 protected 成员在派生类中为 protected 属性;
  • 基类中所有 private 成员在派生类中不能使用。


protected继承方式

  • 基类中的所有 public 成员在派生类中为 protected 属性;
  • 基类中的所有 protected 成员在派生类中为 protected 属性;
  • 基类中的所有 private 成员在派生类中不能使用。


private继承方式

  • 基类中的所有 public 成员在派生类中均为 private 属性;
  • 基类中的所有 protected 成员在派生类中均为 private 属性;
  • 基类中的所有 private 成员在派生类中不能使用。

可见派生类无法直接访问private属性,因而对于派生类而言唯一访问private属性的方法就是调用父类的public方法(如果存在的话)来曲线救国。