這幾天看書,頗有些收穫。
在c++中,資訊的隱藏和封裝似乎有些問題,比如我在乙個靜態連線褲/動態鏈結庫中定義了我的乙個類,但是我又不想把我的任何的實現細節提供給使用者,這個時候該怎麼做呢?
我所能想到的辦法,似乎就是把頭檔案中的private和pritected宣告的函式和變數全都刪除掉。
於是便自己寫了幾個東西測試下:
類的標頭檔案:myclass.h
#ifndef myclass_h
#define myclass_h
class myclass
;#endif // myclass_h
類的實現:
myclass.cpp
#include "../include/myclass.h"
#include myclass::myclass()
myclass::~myclass()
void myclass::showi()
;#endif // myclass_h
再次執行,結果就不一樣了:
hello world!
main is running!
prt is running!
這是怎麼回事?同樣的靜態庫,我只是把引用的標頭檔案去掉了private和protected而已,結果執行竟然不正確!
這是多麼令人糾結的問題?
根據這幾天看書的心得,main.cpp引用的myclass.h相當於乙個不完整宣告,編譯器需要根據這個生命來確定要為myclass分配的記憶體大小,所以如果對類的生命不完整,那麼傳遞引數型別為這個類的物件的時候,就會出現一些問題了!當然,這裡如果換成是myclass *引數的話,執行基本正常,但是要注意,由於myclass的宣告不完全,這個時候如果想要宣告這個myclass的物件的複製,也會出為題的!物件中的i不會被複製!
myclass t2(ms);這樣的t2中的i是不等於ms中的i的!很顯然編譯器無法知道預設的複製建構函式是什麼!
C 關於記憶體的思考
對面試既愛又恨,每次面試都像是經歷了一次洗禮,緊張又興奮,大腦高速運轉,最重要的是每次都會發現自身的許多不 足,這樣才能不斷的提高自我。下面是面試遇到的乙個問題,還挺有意思的。include void getmemory char p p char malloc 100 void test void...
關於C 多型的思考
c 中,可以如下定義 base father new derived father 是基類引用,指向子類物件,這一點有點類似c 該引用的使用模式如下 先說結論 測試 如下 using logging class base public virtual void show2 public void m...
關於C 思考(二)
c 很雜,很龐大,其中有乙個概念是非常重要的 之一 拷貝建構函式,想當初的時候,對於它理解不夠,造成各種bug。其實拷貝建構函式的基礎是引用。先上 int f int x,char c int g f a,b 彙編後 簡化 push b push a call f add sp,4 mov g,re...