生活随笔
收集整理的這篇文章主要介紹了
c++ 基类和派生类的虚函数表是否为同一个
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結
派生類實現基類的虛函數時,基類中虛函數表和派生類的虛函數表地址不同,基類虛函數表中的虛函數地址和派生類虛函數表中的虛函數地址不同; 派生類不實現基類的虛函數時,基類中虛函數表和派生類中虛函數表地址不同,基類虛函數表中的虛函數地址和派生類虛函數表中的虛函數地址相同。
嘗試
派生類實現基類的虛函數
#include <iostream> class TESTA {
public: TESTA() = default;~TESTA() = default;virtual void test() { std::cout << "TESTA test()" << std::endl; }
}; class TESTB : public TESTA{
public: TESTB() = default;~TESTB() = default;virtual void test() { std::cout << "TESTB test()" << std::endl; }
}; int main()
{ TESTA a; TESTB b; int **p = (int**)&a; std::cout << "father virtual table address: " << p[0] << std::endl; std::cout << "father virtual func address: 0x" << std::hex << p[0][0] << std::endl; p=(int**)&b; std::cout << "son virtual table address: " << p[0] << std::endl; std::cout << "son virtual func address: 0x" << std::hex << p[0][0] << std::endl; return 0;
}
運行結果:
father virtual table address: 0x5577d3b7fd40
father virtual func address: 0xd3b7d532
son virtual table address: 0x5577d3b7fd28
son virtual func address: 0xd3b7d56e
從運行結果可以看到:派生類實現基類的虛函數,基類中虛函數表和派生類的虛函數表地址不同,基類虛函數表中的虛函數地址和派生類虛函數表中的虛函數地址也不同。
派生類不實現基類的虛函數
#include <iostream> class TESTA {
public: TESTA() = default;~TESTA() = default;virtual void test() { std::cout << "TESTA test()" << std::endl; }
}; class TESTB : public TESTA{
public: TESTB() = default;~TESTB() = default;void test1() { std::cout << "TESTB test1()" << std::endl; }
}; int main()
{ TESTA a; TESTB b; int **p = (int**)&a; std::cout << "father virtual table address: " << p[0] << std::endl; std::cout << "father virtual func address: 0x" << std::hex << p[0][0] << std::endl; p=(int**)&b; std::cout << "son virtual table address: " << p[0] << std::endl; std::cout << "son virtual func address: 0x" << std::hex << p[0][0] << std::endl; return 0;
}
運行結果:
father virtual table address: 0x5582e3f9ad40
father virtual func address: 0xe3f98532
son virtual table address: 0x5582e3f9ad28
son virtual func address: 0xe3f98532
從運行結果可以看到:派生類不實現基類的虛函數,基類中虛函數表和派生類中虛函數表地址不同,基類虛函數表中的虛函數地址和派生類虛函數表中的虛函數地址相同。
總結
以上是生活随笔 為你收集整理的c++ 基类和派生类的虚函数表是否为同一个 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。