今天一同事出去面試回來,帶回來一道題,呵呵。
給定乙個字串的類,類的各成員和函式已經定義。現在要求,根據定義,寫出各個函式的實現。類的定義如下:
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...