1
4

2 に答える 2

6

2つの関数の戻り型が同じではないため、コンパイラが文句を言っています。void一方はaを返し、もう一方は。を返しますbool。2つの関数のリターンタイプは同じである必要があります。

あなたが持っている必要があります

class A {
   public:  
   virtual bool Show() {
      std::cout<<"\n Class A Show\n";
      return true; // You then ignore this return value
   }
};

class B :  public A {
   public:
   bool Show(int i) {
      std::cout<<"\n Class B Show\n";
      return true; // You then ignore this return value
   }
};

Aクラスとを変更できない場合は、クラスをB変更して、メソッドの代わりにメソッドを使用できます。CDvoid Show()bool Show()

これらのいずれも実行できない場合は、継承よりも合成を使用できます。関数から継承する代わりにB、関数内に型のメンバーを設定します。D

class D : public C {
public:
    bool Show() {
        std::cout<<"\n child Show\n";
        return true;
    }
    void ShowB() {
        b.Show();
    }

private:
    B b;
};
于 2012-11-07T08:08:17.313 に答える
1

仲買人を追加する必要があります。何かのようなもの:

class C1 : public C{
public:
    virtual bool show(){ /* magic goes here */ }
};

class D: public C1, public B{
....

Showを呼び出すには、次のようなものが必要です。 static_cast<C&>(c).Show();

于 2012-11-07T08:15:36.500 に答える