1

次のコードを検討してください。

class Base
{
  protected:
  virtual void methodDefinedInBase() = 0;
}

Class Derived: private Base
{
  public:
  void someMethod();
  protected:
  virtual void methodDefinedInBase()
  {
    std::cout<<"From B"<<std::endl;
  }
}

上記のコードでは、「Derived」タイプのオブジェクトを作成できます。C ++を使用すると、Derivedクラスの「someMethod()」からメソッド「methodDefinedInBase()」にアクセスできます。しかし、「Base」タイプのオブジェクトを作成するにはどうすればよいですか?

ありがとう、

ヴィシュヌ。

4

3 に答える 3

3

ベータがコメントで指摘したように、抽象基本クラス(純粋仮想メソッドを持つもの)をインスタンス化することはできません。これらの純粋仮想メソッドを実装する派生クラスのみをインスタンス化できます。これは、パブリック継承とプライベート継承のどちらを使用しているかに関係なく当てはまります。

于 2011-06-21T22:30:40.527 に答える
1

「Base」タイプのオブジェクトは作成しません。Baseに純粋な仮想メンバーを指定することで、このクラスは単独では存在できず、派生クラスを介してのみ存在できることを明示的に示しています。作成したいのは、Baseへのポインターまたは参照です。

Derived1 x;
Derived2 y;

// Somewhere inside Derived1:
Base & rb = x;

// Somewhere inside Derived2:
Base * pb = &y;

次に、との具体的なタイプを知らなくてもrb、均一に処理することでポリモーフィズムを使用できます。pbxy

于 2011-06-21T22:42:09.617 に答える
0

基本クラスでの純粋仮想関数の宣言は、次のことを意味します。1.そのようなクラスのオブジェクトはインスタンス化できません。2.派生クラスのオブジェクトをインスタンス化するには、すべての純粋仮想関数を定義する必要があります。言い換えると、純粋仮想メソッドでは、定義されたクラスのオブジェクトを作成できません。

于 2013-04-04T14:35:00.837 に答える