從c物件導向的實現理解c 的物件(二)

2021-09-02 11:03:53 字數 1852 閱讀 6012

1. 類就可以看作乙個struct,類的方法,可以理解為通過函式指標的方式實現的,類物件分配記憶體時,只分配成員變數的,函式指標並不需要分配額外的記憶體儲存位址。

2. c++中類的建構函式,就是進行記憶體分配(malloc),呼叫建構函式

3. c++中類的析構函式,就時**記憶體(free)

4. c++是基於棧和全域性資料分配記憶體的,如果是乙個方法內建立的物件,就直接在棧上分配記憶體了。

專門在轉殖時使用的建構函式,是構造拷貝函式,原型時「類名(const 類名&)",避免拷貝整個物件,在傳遞物件時,改為傳遞指標,同時將構造拷貝函式設定為私有這樣做到強制限制。

5. 成員變數為私有,僅僅時編譯時起到保護左右,實際記憶體模型沒有變。

6. 繼承是在原有的父類的記憶體模型上,再新增自己的資料

#include #include class testclass 

~testclass()

testclass(testclass &src)

};void test(testclass al)

void test(testclass *al)

int main(void)

如果是自己模擬實現override,實際就是要呼叫的實現使用函式指標,子類確定這些函式。

/*

* test.cpp

* * created on: 2023年5月24日

* author: jme

*/#include #include // 1. 定義乙個函式指標

typedef void (*testfunc)();

class base

// 函式指標

testfunc func;

};void funcimpl_1()

void funcimpl_2()

class sub1: public base

};class sub2: public base

};int main(void)

c++的virtual語法:

/*

* test.cpp

* * created on: 2023年5月24日

* author: jme

*/#include #include class base ;

class sub1: public base

virtual void testfunc();

void testfunc2();

};class sub2: public base

virtual void testfunc();

void testfunc2();

};class sub3: public base

void testfunc();

void testfunc2();

};void base::testfunc()

void base::testfunc2()

void sub1::testfunc()

void sub1::testfunc2()

void sub2::testfunc()

void sub2::testfunc2()

void sub3::testfunc()

void sub3::testfunc2()

void callwithpointer(base *basec)

void callwithoutpointer(base basec)

void call2(base *basec)

int main(void)

從c物件導向的實現理解c 的物件(一)

1.使用struct來儲存資料 2.使用struct裡面的函式指標指向相應的函式 include include 不完整的宣告,方便後面函式指標型別變數的定義 struct person typedef struct person pperson typedef void setage pperso...

C 物件導向理解

物件導向是面向過程演化而來 面向過程 面向的是完成一件事的過程,強調完成這件事的動作 例項 把衣櫃搬到臥室裡 1.開啟臥室門 2.把衣櫃搬到臥室裡 3.關閉臥室門 面向過程的思維 小明 瘦小 個子矮 小明踩著凳子開啟臥室門 小明找老王幫忙把衣櫃搬到臥室裡 小明踩著凳子關閉臥室門 老王 強壯 老王自己...

c實現物件導向

c語言的結構體裡面沒有函式,但是c 裡面有函式,所以今天實現乙個c語言物件導向的程式 1 封裝 include include include typedef struct cmd newcmd void run newcmd pcmd void print newcmd pcmd int main...