1

C ++での仮想関数の処理方法に関する記事はたくさんありますが、基本的な疑問を1つクリアすることはできませんでした。派生クラスのvptr変数は、基本クラス変数によってオーバーライドされますか。ptr変数の名前もマングルされていますか?

Class Base
{
public:
    virtual void test();
};

class Derived 
{
public:
     virtual void test();
};

電話したら

Base b = new Derived();
b->test();

に変身します

(*b->vptr[<index>])(b);

インデックスがvtableエントリを指す場合。

私の疑問は、このvptrも名前が壊れているかどうかです。

4

2 に答える 2

9

C ++標準はvptr、実装の詳細であり、したがってコンパイラーがこの方法で仮想関数を実装する必要さえないため、ポリモーフィック・クラス内の存在を認識しません。ですからvptr、予約されたキーワードではありません(これはあなたが尋ねようとしていることだと思います)。

于 2012-08-25T06:23:56.937 に答える
1

言語手段によってC++でvptrにアクセスすることはできないので、「いいえ」で答えてください-そのような変数と名前はなく、したがってそのマングリングはありません:)

于 2012-08-25T06:24:32.420 に答える