今天在看C++ Primer,寫重載操作運算符練習程序的時候,在成員函數中直接操作形參中同類型對象的private成員,程序如下:
OperatorOverload& OperatorOverload::operator=(const OperatorOverload &op)
{
m_nNum1 = op.m_nNum1; //op.getNum1(); m_nNum1爲private
m_nNum2 = op.m_nNum2; //op.getNum2(); m_nNum2爲private
return *this;
}
程序居然可以編譯通過,讓我對private的訪問控制權限產生懷疑:不是不能訪問對象的private成員嗎?
後來看了這篇文章,作者對C++的訪問控制進行了比較詳細的介紹,看完後對C++的private訪問控制有了新的認識。
原來C++實例化對象的時候只是對數據成員進行實例化,成員函數是所有該類對象共享的,即一個類只有一份成員函數,類的成員函數可以訪問該類的任何數據成員,包括private和該類對象的數據成員。如果需要訪問該類多個對象的數據成員,可以在類的public函數中傳入該類對象的引用或者指針,這樣就可以操作同類其他對象的數據成員。
總結:C++的訪問控制符是以類爲單位,而不是以對象爲單位。