C++で作業している間にかかっていました。私はSO、および他の場所(例:returning an abstract class from a function、How do I make an abstract class properly return a concrete instance of another abstract class?)についていくつかの回答を試みましたが、まだ問題がありました。これらは完全には適合しないようです...C++を使用して抽象クラスを返す方法
私は持っています抽象クラス、派生クラス:
class AbstractClass {
virtual std::string virtMethod() = 0;
}
class Derived : public AbstractClass {
std::string virtMethod();
}
また、私は抽象クラスの戻り値の型を取得しようとしている私の別々のクラスが(もちろん、派生クラスのインスタンスを返します)。
私はポインタと参照を使用して試してみた:
AbstractClass* methodFromOtherClass() {
if (somethingIsTrue) {
Derived d = Derived();
return &d;
}
SomeOtherDerived s = SomeOtherDerived();
return &s;
}
Xcodeで、私に警告を与える、:ローカル変数 'D' に関連付けられたスタックメモリの
アドレスは
を返さ
私は静的なDerivedオブジェクトを作成しようとしましたが、私の "methodFromOtherClass()"を呼び出すメソッドで破棄できませんでした。私もスマートポインタ(誰かがそれらの私の明白な誤用を指摘するかもしれませんが)で私の手を試してみた
:
std::unique_ptr<AbstractClass> methodFromOtherClass() {
if (somethingIsTrue) {
Derived d = Derived();
return std::unique_ptr<AstractClass>(&d);
}
SomeOtherDerived s = SomeOtherDerived();
return std::unique_ptr<AstractClass>(&s);
}
以上、おそらく当然、私にセグメンテーションフォルトを提供します。
私はこれをJavaで簡単に行うことができたことに慣れています...どんな助けもありがとうございます。現時点ではC++は私にとって非常に強力な言語ではないので、私は見落としている非常に基本的なものになる可能性があります。
あなたの最後の試みはほぼ正しいです。 'std :: make_unique();'を返します。 –
nwp