スケルトンコードは次のとおりです。
class C{
callMe(){}
};
class A{
// How to use callMe()
};
class B : C {
callMe();
A a;
};
この例では、クラス B がクラス C を拡張しているため、callMe() メソッドを呼び出すことができます。しかし、クラス A がクラス C を拡張できないことを考えると、クラス A を使用して callMe() を使用する必要があります。
スケルトンコードは次のとおりです。
class C{
callMe(){}
};
class A{
// How to use callMe()
};
class B : C {
callMe();
A a;
};
この例では、クラス B がクラス C を拡張しているため、callMe() メソッドを呼び出すことができます。しかし、クラス A がクラス C を拡張できないことを考えると、クラス A を使用して callMe() を使用する必要があります。
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 ++では、メソッドは自動的に仮想としてマークされません。ポリモーフィズムを使用する場合は、メソッドを仮想としてマークする必要があります。また、メソッドを機能させるには、ポインターからメソッドを使用する必要があります。
class C{
callMe(){}
friend class A;
};
class A{
//use call me here
};
次のインスタンスを提供する必要があります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;
};