繼承與派生

什麼是繼承

面向對象中的一個概念。比如汽車是屬於交通工具這個類別中的一種,那麼就把汽車稱爲是交通工具的子類別,而交通工具稱爲汽車的父類別,這樣他們之間就屬於繼承關係。這種繼承關係使得子類具有父類的各種屬性和方法,而不需要再編寫或改變相同的功能。同時在子類中可以增加屬於自己的屬性和方法來完成自身功能需求和覆蓋父類中原有的屬性和方法,得到與父類不同的功能。

基本語法:class 子類名:父類名錶 { 數據成員和成員函數聲明 };

父類名錶構成:訪問控制   父類名,訪問控制   父類名,......,訪問控制   父類名

訪問控制:表示子類對於父類的繼承方式,影響子類對父類的訪問控制

public                  公有繼承

private                 私有繼承

protected             保護繼承

要點注意

1、子類擁有父類的特徵(屬性和方法(除了構造和析構)),而父類不會包含子類的特徵,父類更通用(子類中共有的),子類更具體(自身需要的)

2、子類受限於父類的訪問控制,父類中public、protected修飾的可以被繼承,private修飾的不能被繼承

3、子類根據需要可以增加父類中沒有的屬性和方法

4、子類也可以被繼承(一種特殊的父類)

5、子類對象可以當作父類對象使用

子類對外訪問屬性表

 

                                         父類成員訪問級別

 

 

public

proteced

private 

public

public

proteced

private

proteced

proteced

proteced

private

private

private

private

private

public繼承:父類成員在子類中保持原有訪問級別

private繼承:父類成員在子類中變爲private成員

protected繼承:父類中public成員會變成protected

                          父類中protected成員仍然爲protected

                          父類中private成員仍然爲private

如何爲成員聲明訪問級別

1、需要被外界訪問的成員直接設置爲public

2、只能在當前類中訪問的成員設置爲private

3、只能在當前類和子類中訪問的成員設置爲protected,protected成員的訪問權限介於public和private之間。

#include <iostream>
using namespace std;
#pragma warning(disable : 4996)

class A
{
private:
    int a;//內部訪問
protected:
    int b;
public:
    int c;
    A()
    {
        a = 0; b = 0; c = 0;
    }
    void set(int a, int b, int c)
    {
        this->a = a; this->b = b; this->c = c;
    }
};

class B : public A
{
public:
    void print()
    {
        //cout<<"a = "<<a; //err
        cout << "b = " << b ;
        cout << "  c = " << c << endl;
    }
};

class C : protected A
{
public:
    void print()
    {
        //cout<<"a = "<<a; //err
        cout << "b = " << b ;
        cout << "  c = " << c << endl;
    }
};

class D : private A
{
public:
    void print()
    {
        //cout<<"a = "<<a; //err
        cout << "b = " << b ;
        cout << "  c = " << c << endl;
    }
};

int main()
{
    A aa;
    //aa.a = 1;//當前類中訪問
    //aa.b = 2;//當前類中訪問或子類訪問
    aa.c = 3;
    aa.set(4, 5, 6);

    B bb;//public繼承
    //bb.a = 1;//父類中訪問
    //bb.b = 2;//當前類中或父類中訪問
    bb.c = 3;
    bb.set(4, 5, 6);
    bb.print();

    C cc;//protected繼承
    //cc.a = 1;//父類中訪問
    //cc.b = 2;//當前類中或父類中訪問
    //cc.c = 3;//當前類中或父類中訪問
    //cc.set(4, 5, 6);//當前類中或父類中訪問
    cc.print();

    D dd;//private繼承(不可訪問)
    //dd.a = 1;//父類中訪問
    //dd.b = 2;//當前類中或父類中訪問
    //dd.c = 3;//當前類中或父類中訪問
    //dd.set(4, 5, 6);//當前類中或父類中訪問
    dd.print();

    system("pause");
    return 0;
}

“三看”原則

C++中的繼承方式(public、private、protected)會影響子類的對外訪問屬性,判斷某一句話,能否被訪問

1、看調用語句,這句話寫在子類的內部、外部

2、看子類如何從父類繼承(public、private、protected)

3、看父類中的訪問級別(public、private、protected)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章