c const指標與函式呼叫

2021-08-23 12:07:22 字數 966 閱讀 9229

在我的部落格中,已經討論了動態繫結和靜態繫結,以及在預設引數情況下虛函式的繫結情況。一般情況下,我們

是用非const的基類指標指向派生類物件,如果通過該指標呼叫虛函式則發生的動態繫結,如果我們定義乙個const指標,指向派生類的物件,如果派生類裡定義了同名的虛函式和

const函式,會發生什麼呼叫???

測試1:

#include#include#include#includeusing namespace std;

class a

void f() const

};class b : public a

void f() const};

void g(const a* a)

int main()

結果:

測試2:

將類a進行修改:

class a

virtual void f() const

};

結果:

可以看出:

(1)const指標智慧型呼叫類的const函式,如果用const指標呼叫非const函式將會報錯,非const指標呼叫const函式編譯器不會報錯。

(2)const與虛函式並存的時候,const指標只能呼叫const函式,測試1中,由於const f()不是虛的,所以對const呼叫時靜態繫結,呼叫的是基類的const函式。在測試2中將

const f()設定為虛函式時,由於派生類重寫const f(),所以呼叫派生類的const f()。

**: 

筆記 C const與指標

const int p1 intconst p2 int const p3 在最後一種情況下,指標是唯讀的,也就是 p3 本身的值不能被修改 在前面兩種情況下,指標所指向的資料是唯讀的,也就是 p1 p2 本身的值可以修改 指向不同的資料 但它們指向的資料不能被修改。資料上 初學const,感覺資料...

C const與函式過載

const 修飾函式有三種 constt foo bar constt const 1.修飾函式返回值 函式返回值不能作為區分函式過載的因素 2.修飾函式引數 如 void foo int void foo const int 如果以上這兩個函式是在乙個作用域內,函式過載失敗,編譯報錯。既,cons...

C const物件指標與const指標 (八)

1 例 1.int i 1 const int cptr i cptr 2 出錯,cptr指向的是常量1 cout cptr 注意 指向 const 的指標常用作函式的形參。將形參定義為指向 const 的指標,確保傳遞給函式的實際物件在函式中不因形參而被修改。2 const pointer本身值不...