C 類的實現方式

2021-07-07 10:39:21 字數 1439 閱讀 5079

假設有乙個簡單類如下:

class test

int getm()

static void print()

};

呼叫如下:

test t(1);

a.getm();

test::print();

c++類實現方式:

struct test ;

// 建構函式

void test_initialize(test* this, int i)

// 普通成員函式中預設傳遞了乙個this指標

int test_getm(test* this)

// 靜態成員函式中無this指標

void test_print()

test t;

test_initialize(&t, 1);

test_getm(&t);

test_print();

c++多型的實現原理:

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表

虛函式表是乙個儲存類成員函式指標的資料結構

虛函式表示由編譯器自動生成和維護

virtul成員函式會被編譯器放入虛函式表中

存在虛函式時,每個物件中都有乙個只想虛函式表的指標(vptr)

class parent 

virtual void func(int n)

};vtable:

void parent::func();

void parent::func(int n);

parent物件:

vptr = &vtable;// 物件初始化完成之後才執行

class child: public parent 

virtual void func(int n)

};vtable:

void child::func();

void child::func(int n);

child物件:

vptr = &vtable;// 物件初始化完成之後才執行

呼叫如下:

void run(parent* p)

編譯器確定func是否為虛函式:

否:直接呼叫成員函式(靜態編譯)。

child c;
c.vptr指標分部初始化:

1 當執行父類的建構函式時,c.vptr指向父類的虛函式表;

2 父類的建構函式執行完成後,c.vptr只想子類的虛函式表;

c 類的編譯器實現方式描述

貌似有些同學還不太明白這個,我試著用c 描述c 類相關的一些實現方式。設類abc,bc繼承於a,都有個虛函式f 析構函式為虛 c a struct a a void f printf class a n virtual a struct b public a b virtual void f pri...

實現string類的幾種方式

淺拷貝 淺拷貝的意思就是在拷貝建構函式 賦值運算子函式時並沒有給新物件開闢一塊空間,而是直接二者公用一塊空間。這個問題就很麻煩了。s1,s2共用一塊空間,此時不論s1怎樣修改,都會影響到s2,而且析構s1後,s2就無法繼續使用。簡單 實現如下 class string string string s...

呼叫介面實現類的方式

1.當要呼叫介面的實現類時,有2種方法 1 宣告介面,實現類例項化 2 通過配置檔案的方式,用和兩個標籤,決定使用介面的那個實現類 2.遇到的問題,別人寫好使,我寫不好使 1 使用ssh開發,宣告介面 peforumcommentservice 是介面 private peforumcomments...