0

私はこのようなクラスAとクラスBを持っています:

class A
{
public:
   A(){}
};

class B : public A
{
public:
   B() : A()
   {
      value = 10;
   }
   int Value()
   {
      return value;
   }

protected:
   int value;
}:

私はこのコードを持っています:

int main()
{
   A* a = new B();
   // how can I access to Value() ? I would like to make that :
   int val = a->Value();
   // must i cast a to B ? how ?
}

ご協力いただきありがとうございます。

4

4 に答える 4

6

Value() を A の純粋仮想関数にします (仮想デストラクタも追加します)。

class A
{
public:
  A(){}
  virtual ~A(){}
  virtual int Value() = 0;
};
于 2012-12-17T20:47:55.673 に答える
1

問題は、Virtual() が継承されていないことです。A では定義されていません。

A で Value() を純粋仮想として宣言します。

virtual int Value() = 0;

コンパイラに関する限り、A (作成しているオブジェクト型) には Value() 関数がないため、Value() にアクセスすることはできません。

于 2012-12-17T20:46:50.387 に答える
1

仮想メソッドを使用する

class A
{
public:
   A(){}
   virtual int Value() = 0;
   virtual ~A(){}
};

class B : public A
{
public:
   B() : A()
   {
      value = 10;
   }
   int Value()
   {
      return value;
   }

protected:
   int value;
}:

また、ご注意ください(教えて聞かない原則)。

于 2012-12-17T20:48:16.860 に答える
0

代わりにこれを行ってください:

B* b = new B();

Bmakeの機能が必要な場合B

于 2012-12-17T20:46:45.590 に答える