[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++繼承狀態表”
C++繼承 一般變數 靜態變數 存取權限變化說明
在C++中,當一個類別繼承另一個類別時,會涉及到一般變數和靜態變數的存取權限變化。以下是一些關於這些變化的說明:
●一般變數(Instance Variables):
♦當一個子類別繼承一個父類別時,通常可以直接存取父類別中的一般變數,前提是這些變數的存取權限設置為公開(public)或受保護(protected)。
♦如果父類別中的一般變數設置為私有(private),則子類別無法直接存取這些變數,除非通過父類別提供的公共接口來訪問。
●靜態變數(Static Variables):
♦在繼承關係中,靜態變數的存取方式與一般變數有所不同。
♦如果一個類別中定義了靜態變數,子類別可以直接通過類別名稱加上作用域運算符(::)來訪問這些靜態變數,無論其存取權限設置為何種類型。
♦但如果子類別中重新定義了同名的靜態變數,則會遮蔽(hide)父類別中的靜態變數,此時在子類別中訪問該靜態變數時將會使用子類別中的版本。
繼承在C++中提供了一種機制,使得子類別可以重用父類別中的成員,但存取權限的變化需要開發人員注意和處理,以確保代碼的正確性和安全性
在 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 成員。