關於C 資訊封裝的思考

2021-05-26 21:17:49 字數 1054 閱讀 3346

這幾天看書,頗有些收穫。

在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...