在我的部落格中,已經討論了動態繫結和靜態繫結,以及在預設引數情況下虛函式的繫結情況。一般情況下,我們
是用非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本身值不...