-9

スケルトンコードは次のとおりです。

class C{
  callMe(){}
};

class A{
  // How to use callMe()
};

class B : C {
  callMe();
  A a;
};

この例では、クラス B がクラス C を拡張しているため、callMe() メソッドを呼び出すことができます。しかし、クラス A がクラス C を拡張できないことを考えると、クラス A を使用して callMe() を使用する必要があります。

4

3 に答える 3

2

AにタイプCのオブジェクトを含める必要があります。

class A
{
 private:
   C objC;

 public:
   void WhateverMethod() { objC.CallMe(); }

};

また、継承の構文は次のとおりです。

class B : C{

};

Bが単にCallMe()にアクセスできるようにする場合は、Bで再定義する必要はありません。Cから継承します。BがCallMeをオーバーライドする場合は、次のようにする必要があります。

class C
{
  public:
    virtual void CallMe() { //definition }

};

class B : public C
{
 public:
   void CallMe() { //redefine it here }

};

注意してください、私はあなたの構文エラーからあなたがJAVAプログラマーであると仮定します。C ++では、メソッドは自動的に仮想としてマークされません。ポリモーフィズムを使用する場合は、メソッドを仮想としてマークする必要があります。また、メソッドを機能させるには、ポインターからメソッドを使用する必要があります。

于 2012-08-13T13:56:10.487 に答える
1
class C{ 
  callMe(){} 
friend class A;
}; 


class A{

//use call me here

};
于 2012-08-13T13:57:39.670 に答える
0

次のインスタンスを提供する必要がありますC

class C {
public: // has to be public
  void callMe() const {}
};

class A{
public:
    A(const C& inst) : inst(inst) {}

    void foo() {
        inst.callMe();
    }
private:
    const C& inst;
};
于 2012-08-13T13:57:24.417 に答える