2016-06-08 125 views
0

我已經創建了兩個類A和B,其中B從類A繼承。正如您所看到的,我有一個類A中的矢量,該類位於類的受保護部分中。我不確定使用保護是否是不好的做法?在不破壞封裝的情況下訪問基類元素

#include <vector> 

class A 
{ 
public : 
    A(); 
protected: 
    std::vector <std::string> a; 
}; 

class B : A 
{ 
public : 
    B(); 
void accessVector() 
{ 
    a.size(); 
} 
private: 

}; 
+1

完全取決於您的設計,有時這是完全有效和有用的。存在'protected'關鍵字是有原因的。 – CoryKramer

+0

_「我不確定使用保護是否是不好的做法?」_如果不好的做法取決於(語義)上下文。 –

+0

通常情況下,當不希望對象/實例類(基類或派生類)訪問這些成員時,可以使成員受到保護。但是如果是朋友課,這會被打破。 – sameerkn

回答

2

A使得數據成員a保護,它是提供以下擔保,從它派生的所有類:

「你可以做任何你喜歡a沒有告訴我這包括追加修改它的內容,刪除項目,對它進行排序,從它移動,移動到它,或者使其狀態不明確和/或不可知的我「。

請記住,任何人都可以創建一個派生自A的類。

出於這個原因,所有意圖和目的,保護成員公共成員,因爲派生類可以簡單地說以下內容:

public: 
using A::a; 

這裏開始一直向前,你會發現,僅存在兩個顯用例爲protected

  • 當一個基類定義了可能需要從同一functi的重寫版本稱爲虛擬成員函數在派生類中。

  • 當基類想要將'數據作爲接口'暴露給派生類,而不是世界。

相關問題