class X
{
protected:
void protectedFunction() { cout << "I am protected" ; }
};
class Y : public X
{
public:
using X::protectedFunction;
};
int main()
{
Y y1;
y1.protectedFunction();
}
這樣我就可以暴露基類的其中一個功能。這兩個類是否違反封裝?
- ,這是否違反了封裝的原則?
- 是否有一個特定的原因,爲什麼這是標準?
- 這有什麼用處,還是會在新標準中改變?
- 標準中是否有與此相關的公開問題?
澄清 - 我的問題的目的不是談論破解封裝的暴力或棘手的方法。 我只想討論可能導致此功能的C++的設計決策或一些其他功能。 它只是解決方案的功能隱藏問題的一個副作用,或者它是一個獨立的功能,因爲某些特定的原因在C++中引入 – 2010-01-19 18:43:28
我認爲人們列出所有這些破壞封裝的方式的原因並不是文檔如何這樣做,但要解釋你必須選擇打破封裝。 由於您嘗試訪問私人方法或會員時出現錯誤,這可能會作爲溫和提醒,如果您遵守設計師的意願,可以引導您設計合作解決方案。封裝可以被強制破壞總是給定的。受保護的封裝不能在沒有強制力的情況下被破解,我認爲這不是部分語言的失敗。 – 2010-01-19 19:11:44