これを行うにはC++で可能ですか?継承:基底クラスから派生クラス関数を呼び出す
class Base {
int a(Derived d) { d.b(); }
};
class Derived : public Base {
int b();
};
Base.hppでもDerived.hppを含める必要がありますか?
これを行うにはC++で可能ですか?継承:基底クラスから派生クラス関数を呼び出す
class Base {
int a(Derived d) { d.b(); }
};
class Derived : public Base {
int b();
};
Base.hppでもDerived.hppを含める必要がありますか?
これを行うにはC++が可能ですか?
はい、それはC++言語で使用される非常に簡単で、基本的なパターン(と呼ばれる多型またはTemplate Method Pattern)です:
class Base {
int a() { b(); } // Note there's no parameter needed!
// Just provide a pure virtual function declaration in the base class
protected:
virtual int b() = 0;
};
class Derived : public Base {
int b();
};
次のコンパイル:
class Derived;
class Base {
public:
int a(Derived d);
};
class Derived : public Base {
public:
int b() { return 42; }
};
int Base::a(Derived d) { d.b(); }
それはコンパイルされます。私はここで尋ねられていることではないことに気付いていますが(あなたがコメントで述べたように)。 –
これは、関数を呼び出すことが可能ですC++のイディオムと呼ばれる基底クラスのDerivedクラスから: "Curiously recurring template pattern" CRTP。以下の呼び出しを見つけてください:
template <class Child>
struct Base
{
void foo()
{
static_cast<Child*>(this)->bar();
}
};
struct Derived : public Base<Derived>
{
void bar()
{
std::cout << "Bar" << std::endl;
}
};
これは別の方法です。そうです。 –
'b()'を 'Base'の純粋な仮想関数にしてください。 –
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –
前方宣言と定義からの分割宣言を使用すると、サンプルが機能する場合があります。しかし、あなたが見せていることが本当にあなたが望むものなのかどうかはわかりません。 – Jarod42