簡體   English   中英

關於C ++中的訪問說明符

[英]About Access Specifier in C++

我正在閱讀一本C ++手冊,並在有關創建自定義字符串類的章節中讀到了以下代碼:

string& string::operator = (const string& Str)
{
char* temp = new char[Str.m_Length];
m_Length = Str.m_Length;
memcpy(temp,Str.m_Data,m_Length);
delete [ ] m_Data;
m_Data = temp;
return *this; 
}

它是關於復制構造函數的實現。 一切正常,我不能抱怨它的效率,但是我沒有得到的是如何從Str字符串中讀取m_Length和m_Data變量,因為它們是該類的私有成員。 我將向您展示類界面:

class string
{
public:
string();
string (const string& Str);
string& operator = (const string& Str);
~string();
string(char* p);
private:
short m_Length;
char* m_Data;
};

那可能是因為我們在函數中調用Str作為參考值嗎? 要不然是啥?

訪問說明符是相對於一個類的,而不是相對於該類的實例的。 private意味着對一個類是私有的,而不是對該類型的對象是私有的。 也就是說,任何string類型的對象都可以訪問任何其他string對象的private成員。

“這不是封裝中斷嗎?” 我聽到你哭了。 其實沒有 我們傾向於通過更改類的內部實現時可能破壞的功能數量來衡量類的封裝。 string的成員函數已經與私有成員緊密耦合,因此通過允許訪問相同類型的其他對象的私有成員,不會丟失任何封裝。 有關封裝的更多信息,請閱讀“非成員函數如何改善封裝”

我可能還想知道為什么C ++如此奇怪,但是您可能會驚訝地發現Java,C#和許多其他語言中的情況也是如此。

暫無
暫無

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

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