[C/C++基礎] C++繼承狀態表

[C/C++基礎] C++繼承狀態表

[C/C++基礎]  C++繼承狀態表


本篇要分享-C++繼承狀態表,有興趣的(C/P)同好,歡迎來(C/P)一下哈哈 ^ ^


C/C++線上編譯執行: https://www.tutorialspoint.com/compile_cpp_online.php


C++繼承狀態表

           繼承

原本

Public

Protected

Private

Public

子類的公有

子類的保護

子類的私有

Protected

子類的保護

子類的保護

子類的私有

Private

要用父類別存取

要用父類別存取

要用父類別存取

Ps

公有:可直接存取

私有:用公有存取

保護:用公有存取

 

個人習慣把父類別變數如下表分類

Input

Public

Output

Protected

Other

Private


測試程式碼如下

/* Online C++ Compiler and Editor */
#include <iostream>

using namespace std;

class parent
{
    public:
        parent();
        int m_a;
    protected:
        int m_b;
    private:
        int m_c;
};
parent::parent()
{
    m_a=0;
    m_b=0;
    m_c=0;
}
//============================================================
class public_son :public parent
{
    public:
        public_son();
        void setvalue(int,int,int);
        void showvalue();
};
public_son::public_son():parent()
{
 
}
void public_son::setvalue(int a,int b,int c)
{
    m_a=a;
    m_b=b;
    //m_c=c;//必須利用父類別的公有函數才可存取
 
}
void public_son::showvalue()
{
    cout<<"m_a="<<m_a<<endl;
    cout<<"m_b="<<m_b<<endl;
    //cout <<"m_c="<<m_c<<endl;//必須利用父類別的公有函數才可以存取
}
//============================================================
//============================================================
class protected_son :protected parent
{
    public:
        protected_son();
        void setvalue(int,int,int);
        void showvalue();
};
protected_son::protected_son():parent()
{
 
}
void protected_son::setvalue(int a,int b,int c)
{
    m_a=a;
    m_b=b;
    //m_c=c;//必須利用父類別的公有函數才可以存取
 
}
void protected_son::showvalue()
{
    cout<<"m_a="<<m_a<<endl;
    cout<<"m_b="<<m_b<<endl;
    //cout <<"m_c="<<m_c<<endl;//必須利用父類別的公有函數才可以存取
}
//============================================================
//============================================================
class private_son :private parent
{
    public:
        private_son();
        void setvalue(int,int,int);
        void showvalue();
};
private_son::private_son():parent()
{
 
}
void private_son::setvalue(int a,int b,int c)
{
    m_a=a;
    m_b=b;
    //m_c=c;//必須利用父類別的公有函數才可以存取
 
}
void private_son::showvalue()
{
    cout<<"m_a="<<m_a<<endl;
    cout<<"m_b="<<m_b<<endl;
    //cout <<"m_c="<<m_c<<endl;//必須利用父類別的公有函數才可以存取
}
//============================================================
int main()
{
    cout<<"Hello world!"<< endl;
    return 0;
}

2 thoughts on “[C/C++基礎] C++繼承狀態表

  1. C++繼承 一般變數 靜態變數 存取權限變化說明

    在C++中,當一個類別繼承另一個類別時,會涉及到一般變數和靜態變數的存取權限變化。以下是一些關於這些變化的說明:

    ●一般變數(Instance Variables):
    ♦當一個子類別繼承一個父類別時,通常可以直接存取父類別中的一般變數,前提是這些變數的存取權限設置為公開(public)或受保護(protected)。
    ♦如果父類別中的一般變數設置為私有(private),則子類別無法直接存取這些變數,除非通過父類別提供的公共接口來訪問。

    ●靜態變數(Static Variables):
    ♦在繼承關係中,靜態變數的存取方式與一般變數有所不同。
    ♦如果一個類別中定義了靜態變數,子類別可以直接通過類別名稱加上作用域運算符(::)來訪問這些靜態變數,無論其存取權限設置為何種類型。
    ♦但如果子類別中重新定義了同名的靜態變數,則會遮蔽(hide)父類別中的靜態變數,此時在子類別中訪問該靜態變數時將會使用子類別中的版本。

    繼承在C++中提供了一種機制,使得子類別可以重用父類別中的成員,但存取權限的變化需要開發人員注意和處理,以確保代碼的正確性和安全性

  2. 在 C++ 中,繼承是一種允許一個類別從另一個類別獲取屬性和方法的機制。繼承的類別稱為派生類別,而被繼承的類別稱為基類。

    一般變數和靜態變數是 C++ 中兩種不同類型的變數。一般變數是與物件關聯的,而靜態變數是與類別關聯的。

    在繼承中,一般變數和靜態變數的存取權限會發生變化。

    ●一般變數
    ~ 在基類中,一般變數的存取權限可以是 public、protected 或 private。
    ♦public 變數可以在任何地方訪問。
    ♦protected 變數只能在基類及其派生類別中訪問。
    ♦private 變數只能在基類中訪問。
    在派生類別中,一般變數的存取權限默認為 protected。這意味著派生類別中的成員函式只能訪問派生類別本身的一般變數,而不能訪問基類的一般變數。

    ~ 如果派生類別需要訪問基類的一般變數,可以使用以下方法:
    ♦使用 public 繼承來繼承基類。這將使派生類別中的成員函式能夠訪問基類的所有公有變數。
    ♦使用 protected 繼承來繼承基類。這將使派生類別中的成員函式能夠訪問基類的所有受保護變數。
    ♦使用 friend 函式。friend 函式可以訪問任何類別的 private 成員。

    ●靜態變數
    ~ 在基類中,靜態變數的存取權限可以是 public、protected 或 private。
    ♦public 靜態變數可以在任何地方訪問。
    ♦protected 靜態變數只能在基類及其派生類別中訪問。
    ♦private 靜態變數只能在基類中訪問。
    在派生類別中,靜態變數的存取權限默認為 private。這意味著派生類別中的成員函式不能訪問基類的靜態變數。

    ~ 如果派生類別需要訪問基類的靜態變數,可以使用以下方法:
    ♦使用 public 繼承來繼承基類。這將使派生類別中的成員函式能夠訪問基類的所有公有靜態變數。
    ♦使用 protected 繼承來繼承基類。這將使派生類別中的成員函式能夠訪問基類的所有受保護靜態變數。
    ♦使用 friend 函式。friend 函式可以訪問任何類別的 private 成員。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *