簡體   English   中英

繼承/多態 - 我是否被迫使用“受保護”變量?

[英]Inheritance/Polymorphism - Am I forced to use "protected" variables?

我目前正在使用 Big C++ 2nd Edition,使用 Code::Blocks 17.12,關於繼承的章節

本書介紹了受保護的變量類型,適用於您希望允許派生類訪問所述變量的情況。

本書還預先警告受保護的元素會遭受公共變量的一些陷阱:在最壞的情況下,派生類成員可能會破壞基類數據

這本書在一個專門的章節中演示了時鍾程序中受保護成員的使用,他們在其中介紹了這一點,但在最終代碼中,他們最終將變量設置為私有,然后使用一些 get_ 幫助函數來訪問這些私有數據。 這種私有和使用輔助函數的組合總是在我的 IDE 中返回錯誤,我無法實現

以我為 P8.1 創建的這個簡單示例為例,它是程序員的員工記錄,具有員工基類和程序員派生類。 我創建了以下 ctor,在基類中將變量 name 和 sal 設置為protected狀態

Programmer::Programmer(string p_name, double p_sal)
    :Employee(get_name(), get_sal())
{
    name=p_name;
    sal=p_sal;
}

使用此代碼,該程序可以完美運行。

根據教科書,如果變量 name 和 sal 在 base 中設置為私有狀態,那么我也應該能夠執行代碼,前提是我正在使用我創建的 get_ helper 函數來訪問數據。

誰能解釋這里的問題是什么? 我應該可以使用 protected 還是真的有辦法讓我的所有變量對類保持私有?

我也在https://docs.microsoft.com/en-us/cpp/cpp/protected-cpp?view=vs-2019上找到了這個

也聲明為靜態的受保護成員可被派生類的任何友元或成員函數訪問。 未聲明為靜態的受保護成員只能通過派生類的指針、引用或對象才能被派生類中的友元和成員函數訪問。

到目前為止,我還沒有涉及靜態,所以我最終嘗試了一系列不同的指針和引用組合,但都沒有奏效。

我試圖了解什么時候使用 protected 和什么時候使用 private 基本上,這本書並不清楚。 有任何想法嗎?

出於某種原因,我認為在調用基類構造函數時,您需要提供輔助函數來訪問私有數據。

由於基構造函數已經是公共的,並且通過向它提供派生類構造函數的參數,它將正確構造派生類 obj,從而允許 get_func 讀取其私有變量

Programmer::Programmer(string p_name, double p_sal)
    :Employee(p_name, p_sal)
{}

書上沒看懂,謝謝大家幫忙解惑

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM