1

長い説明ではなく、数行のコードで問題をより明確に説明できると思います。2 つのクラスがあり、一方が他方から継承されているとします。

#include <iostream>
class A{
    public: 
        void parse() 
        {
            treatLine();
        };
        void treatLine()
        {
            std::cout << "treatLine in A" << std::endl;
        }
};

class B : public A{
    public:
        void treatLine()
        {
            std::cout << "treatLine in B" << std::endl;
        }
};

int main()
{
    B b;
    b.parse();
    return 0;
}

実行すると、驚くべきことに、「treatLine in A」と出力されます。クラス B の関数 TreatLine を、タイプ B のオブジェクトで呼び出されるようにすることは可能ですか (つまり、上記のコードでは "treatLine in B" が表示されます)。そして、「treatLine in A」を出力するタイプ A のオブジェクトを作成する可能性を維持します。

4

2 に答える 2

1

仮想treatLine化:

virtual void treatLine() {
    std::cout << "treatLine in A" << std::endl;
}

このようにすると、オブジェクトのコンパイル時の型 (「静的型」と呼ばれる) ではなく、オブジェクトの実行時の型 (「動的型」と呼ばれる) に基づいて関数が呼び出されます。

于 2012-09-24T00:32:32.497 に答える
0

AでtreatLine関数を仮想化する

于 2012-09-24T00:32:55.200 に答える