0

派生クラスのオーバーライドされたメソッドから呼び出すことができるという事実を除いて、純粋仮想関数はどこでも呼び出すことができないようです!それでは、その体の使用は何ですか?例えば。

class base
{
    public:
    virtual void fun()=0
    {
        cout<<"I have been called from derived class"<<endl;
    }
};
class derived:public base
{
    public:
    void fun()
    {
        cout<<"I am the derived class"<<endl;
        base::fun();

    }
};
void main()
{
    derived d;
    d.fun();
}
4

4 に答える 4

5

質問で述べたのとまったく同じ方法で使用されます。派生クラスで再利用できる共通ロジックがいくつかありますが、同時に、派生クラスに非共通部分の実装を提供させる必要があります

于 2012-05-28T17:53:11.187 に答える
2

派生クラス以外の場所から呼び出されたくない一般的な動作を備えた派生実装を提供しながら、派生クラスにそれを実装するように強制します。

于 2012-05-28T17:52:00.800 に答える
1

純粋なメソッドは、JavaやC#などの他の言語とvirtual完全に類似したメソッドとして機能することを目的としています。純粋なメソッドのみで満たされabstractたC++は、他の言語の代表です。classvirtualinterface

彼らに体を与えることはその理想の乱用であり、それは目的を打ち負かします。ベースclassがその子のみに機能を提供したい場合は、protected純粋でない方法を使用して提供する必要があります(それが理にかなっている場合virtualでも可能です)。virtual

于 2012-05-28T17:53:06.930 に答える
0

この質問は、おそらくC ++の純粋仮想関数の複製であり、 これは主に純粋仮想デストラクタ(実装が必要)で使用されるのを見たことがあります。純粋仮想デストラクタの使用を超えたケースを説明する別の良い答えはここにあります:(不)純粋仮想関数

于 2012-05-28T18:03:18.253 に答える