C 語言的面向對象實踐

C 語言中沒有類和對象的概念,可是能夠經過 struct 結構體來實現一樣的效果。相似 Golang 中的 struct,把 C 函數指針當作 struct 的成員,就能夠爲 struct 結構體對象添加方法:函數

#include <stdio.h>

typedef struct People { 
    int age;
    void (*sing)();
    int (*getAge)(struct People *p);
    void (*setAge)(struct People *p, int);
} People;

void sing() { 
    printf("singing\n");
}

void setAge(People *p, int a) { 
    p->age = a;
}

int getAge(People *p) { 
    return p->age;
}

int main(void) { 
    People p;
    p.age = 18;
    // 函數指針初始化
    p.sing = sing;
    p.getAge = getAge;
    p.setAge = setAge;

	// 函數調用,能夠看作是結構體的成員方法
    p.sing();
    
    p.setAge(&p, 30);
    printf("getAge: %d\n", p.getAge(&p));

    return 0;
}
相關文章
相關標籤/搜索