c++虚関数および虚継承図

942 ワード

1.一般単一継承
虚表ポインタは1つしかありません.虚表にはすべての虚関数が含まれています.
思考:1.GrandChildのh_をgrandchildの前のvirtualは削除され、メモリの唯一の変化は、仮想テーブルにGrandChildが欠けていることです::h_grandchild
2.child:virtual public parent?
output:
addr:0014FA44 sizeof = 28 0: f1783c = f110c8 GrandChild::g_child()/このとき注意したいのは、虚関数テーブルにはf//という理解はありませんが、虚関数テーブル内の関数は非仮想継承と同じですが、ベースクラスの位置は違いますChild::h_child() GrandChild::h_grandchild() 1: f1784c = fffffffc  fffffffc  10 2: 100 3: 1000 4: 0 5: f17828 = f11041 GrandChild::f()  Parent::g()  Parent::h() 6: 10
虚基類は必ず最後に置くが,虚関数数表の内容は葛藤し,自分が再ロードされた関数だけを置く.
childとgrandchildのポインタアドレスは同じで、parentのポインタアドレスは最後にあります
2.一般マルチ継承
3.ダミーベースクラスのマルチ継承
以下を参照してください.http://blog.csdn.net/sunmenggmail/article/details/7744608
本人がメモリ分布を検出する関数を添付します.
typedef void (*Fun)(void);
    GrandChild b;
    int *ptr;
    /*B b;*/
    ptr = (int*)&b;
    cout <

本明細書の画像は、次のとおりです.http://blog.csdn.net/haoel