程式1
#include
using namespace std;
class base1
virtual void f(void)
virtual void g(void)
virtual void h(void)
private:
int m_length;
int m_width; };
class base2
virtual void f(void)
virtual void g(void)
virtual void h(void)
private:
int m_length;
int m_width; };
class derived:public base1,public base2
virtual void k(void)
}; int main()
執行結果:
member table address 0x22ff40
data member are follows: 1
2 34
the two vptr address:
the first vptr address 0x22ff40
derived::f()
base1::g()
base1::h()
derived::k()
the second vptr address 0x22ff4c
derived::f()
base2::g()
base2::h()
process returned -1073741819 (0xc0000005) execution time : 2.531 s
press any key to continue.
程式2#include
using namespace std;
class base1
virtual void f(void)
virtual void g(void)
virtual void h(void)
private:
int m_length;
int m_width; };
class base2
virtual void f(void)
virtual void g(void)
virtual void h(void)
private:
int m_length;
int m_width; };
class derived:public base2,public base1
/*修改處*/
virtual void k(void)
}; int main()
執行結果:
member table address 0x22ff40
data member are follows: 3
4 12
the two vptr address:
the first vptr address 0x22ff40
derived::f()
base2::g()
base2::h()
derived::k()
the second vptr address 0x22ff4c
derived::f()
base1::g()
base1::h()
process returned -1073741819 (0xc0000005) execution time : 1.343 s
press any key to continue.
根據執行結果可以得到如下結論:
(1)
派生類中的資料成員是按照對父類的繼承順序確定的。
(2)
虛函式指標在使用者成員表中是按下圖來儲存的。
(3) 在派生類中新建的虛成員函式存放在所繼承的第乙個虛基類的虛函式表中。
程式1 程式2
vptr1
vptr2 1
3 24
vptr2
vptr1 3
1 42
深入理解虛函式
在c 中,在基類中被宣告為virtual並在在乙個或多個派生類中被重新定義的成員函式就是虛函式。基本格式如下 virtual return type func name arg 我們可以通過指向派生類的基類指標或引用來呼叫派生類中同名覆蓋的成員函式。如下 class a 究竟虛函式底層是如何實現多型...
深入理解指標函式
1.指標函式的定義 顧名思義,指標函式即返回指標的函式。其一般定義形式如下 型別名 函式名 函式引數表列 其中,字尾運算子括號 表示這是乙個函式,其字首運算子星號 表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到乙個 指向返回值為 的指標 位址 型別名 表...
深入理解指標函式
顧名思義,指標函式 即返回指標的函式。其一般定義形式如下 型別名 函式名 函式引數表列 其中,字尾運算子括號 表示這是乙個函式,其字首運算子星號 表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到乙個 指向返回值為 的指標 位址 型別名 表示函式返回的指標指...