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

2021-09-02 09:10:51 字數 1212 閱讀 3786

1. 使用struct來儲存資料

2. 使用struct裡面的函式指標指向相應的函式

#include #include // 不完整的宣告,方便後面函式指標型別變數的定義

struct person;

typedef struct person *pperson;

typedef void (*setage)(pperson person, int age);

typedef int (*getage)(pperson person);

/*** 結構體,包含普通的變數(資料)和函式指標(行為)

**/struct person ;

void setagefuncimpl(pperson person, int age)

int getagefuncimpl(pperson person)

int main()

實現過程: 相應的函式的定義, 要接收結構體的位址, 方便struct的資料的操作.

從而實現了函式只操作自己的資料,不會操作其他物件的資料.

問題: 現在是"自己呼叫乙個操作自己的函式,同時卻需要傳遞自己的指標給函式", 能否

根據自己呼叫了乙個函式, 同時隱含將自己的資料位址的指標傳遞給函式. 如果自己來實現

就是函式操作,預先將資料位址傳遞到乙個地方(例如暫存器), 函式執行時, 從指定的地方(例如暫存器)

讀取資料位址, 之後運算元據.

#include #include // 不完整的宣告,方便後面函式指標型別變數的定義

struct person;

typedef struct person *pperson;

typedef void (*setage)(int age);

typedef int (*getage)();

/*** 結構體,包含普通的變數(資料)和函式指標(行為)

**/struct person ;

void setagefuncimpl(int age)

int getagefuncimpl()

int main()

可以看上,上述傳遞物件的位址,獲取物件的位址,都是機械的重複. 如果能夠讓編譯器知道呼叫乙個方法

前,需要傳遞乙個指標, 方法之後,知道應該獲取乙個指標, 就不用重複這些步驟了.

這個就是c++中class, c++編譯器就會幹這些事情, 類其實也就是乙個stuct啊, 呵呵.

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

1.類就可以看作乙個struct,類的方法,可以理解為通過函式指標的方式實現的,類物件分配記憶體時,只分配成員變數的,函式指標並不需要分配額外的記憶體儲存位址。2.c 中類的建構函式,就是進行記憶體分配 malloc 呼叫建構函式 3.c 中類的析構函式,就時 記憶體 free 4.c 是基於棧和全...

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