訪問私有變數的疑問

2021-03-31 08:56:29 字數 1256 閱讀 6735

今天一同事出去面試回來,帶回來一道題,呵呵。

給定乙個字串的類,類的各成員和函式已經定義。現在要求,根據定義,寫出各個函式的實現。類的定義如下:

class cmystring 

;現在遇到的情況是,函式2和函式4容易寫,但是函式1和函式3比較難。

我粗略一想,這還不容易,三下五除二解決了。程式的實現如下:

cmystring::cmystring(char * a_pcstr)

else

}cmystring::cmystring(const cmystring &a_cother)

cmystring & cmystring::operator = (const cmystring &a_cother)

cmystring::~cmystring()

}為了測試,寫了測試程式,如下:

char ctmp = "helloworld";

cmystring stra(ctmp);

cmystring strb(stra);

cmystring strc = strb;

發現 函式的實現沒有錯,呵呵,完成,ok!

但是在仔細一看,不對呀,怎麼stra.m_pcdata,strb.m_pcdata和strc.m_pcdata指向同乙個位址啊!哦,對,在函式1和函式3中,我僅僅只複製了私有成員m_pcdata的指標,所以這個類的三個物件的私有變數m_pcdata都指向了同乙個位址。

原來,我的方法不對。當然,函式2和函式4的正確性是無庸置疑的。

後來,乙個同事終於做出來了。函式1和函式3**如下:

cmystring::cmystring(const cmystring &a_cother)

else

}cmystring & cmystring::operator = (const cmystring &a_cother)

else

else

memset(m_pcdata,'/0',sizeof(char) * (ilen + 1));

strcpy(m_pcdata,a_cother.m_pcdata);

}return *this;

}編譯一遍,正確!

但是令我疑惑不解的是,cmystring a_cother的變數m_pcdata明明是私有的,為什麼可以訪問他的私有變數呢?在其他函式中不行,在建構函式裡可以訪問呢?疑惑中……

看來是我對c++中的私有變數理解不是很透徹。

呵呵,好晚了,明天看看《c++標準》,應該可以從中找出答案吧!

訪問私有變數的疑問

今天一同事出去面試回來,帶回來一道題,呵呵。給定乙個字串的類,類的各成員和函式已經定義。現在要求,根據定義,寫出各個函式的實現。類的定義如下 class cmystring 現在遇到的情況是,函式2和函式4容易寫,但是函式1和函式3比較難。我粗略一想,這還不容易,三下五除二解決了。程式的實現如下 c...

c 反射訪問私有變數

反射是反射dll程式集中的資訊 用反射可以做幾件事,下面演示如何訪問private 比如這有乙個class library 叫ticketlibrary 裡面有乙個class叫ticketinfo ticketinfo.cs 裡面有乙個叫ticketlist的private static list ...

外部訪問C 類的私有方法和私有變數

我們知道,c 類私有方法和變數是不允許通過類例項直接訪問的,這樣子的操作會導致編譯報錯。但有沒有方法訪問到呢?有的。首先,我們需要知道c 和c語言本質上是沒有什麼區別的,c 只是語法層面上對c語言的封裝。所有c函式,只要有宣告和定義,那就可以使用,不存在public和private的區分。c 的pu...