1. 程式人生 > >(二)c++類的繼承與派生

(二)c++類的繼承與派生

繼承與派生

類的派生定義

class derived_class:access_control base_class
{
    //派生類的屬性和方法
    //虛擬函式重寫
};

derived_class 就是我們派生的新的類。
base_class 就是被繼承的類,我們成為基類或者父類。
access_control 就是訪問控制,分為public、private、protected。


繼承的重要說明

  1. 子類擁有父類的所用成員變數和成員函式(除了建構函式和解構函式);
  2. 子類可以新增新的屬性和方法;
  3. 子類是一種特殊的父類;
  4. 子類物件可以當做父類物件使用(型別相容性原則、這也是產生多型的原因)。
    *型別相容性原則

    (後面補充…)

繼承方式對繼承成員訪問屬性的影響

表1 父類成員訪問級別 public protected private
繼承方式 派生類成員屬性
public public protected private
protected protected protected private
private private private private

1. c++中繼承方式對子類成員訪問成員的影響

  • public 繼承:父類成員在子類中保持原有的訪問級別
  • private繼承:父類成員在子類中變成private成員
  • protected繼承:父類public成員變成protected,父類protected成員仍然是protected屬性,父類private成員仍然是private屬性。

2.父類中的private成員在子類中依然存在,但是無法訪問


繼承中的構造與析構

型別相容性原則(子類就是特殊的父類)

  • 子類物件可以直接當做父類使用
  • 子類物件可以直接賦值給父類物件
  • 子類物件可以直接初始化父類物件
  • 父類指標可以直接指向子類物件
  • 父類引用可以直接引用子類物件

注意:在進行上述5個操作之後,派生類(子類)只能使用從父類繼承過來的成員。

請看下面的例子:

#include<iostream>
using namespace std;

class Parent//父類
{
public:
    Parent()
    {
        name = "parent";
    }
    void print()
    {
        cout << "name:" << name << endl;
    }
protected:
    const char* name;
private:
};

class Child:public Parent//子類
{
protected:
    int i;
public:
    Child(int i)
    {
        this->name = "child";
        this->i = i;
    }
};
int main()
{
    Child child(100);
    //型別(賦值)相容型原則
    Parent p1(child);
    Parent *pp1 = &child;
    Parent &p = child;

    p1.print();
    pp1->print();
    p.print();
    return 0;
}

輸出:
這裡寫圖片描述

*型別相容性原則是C++實現多型的基礎。