私は以下の(単純化された)C++コードを持っています。 A
、B
とC
:C++は別のクラスで型として使用されているクラスを継承します
class A
{
};
class B
{
public:
A addSomething(int something)
{
this->something = something;
}
private:
int something;
};
class C : public A
{
};
void main()
{
B variableB = B();
A variableA;
variableA = variableB.addSomething(123);
C variableC;
variableC = variableB.addSomething(456);
}
私は3つのクラスがあります。 B
はマスタークラスまたはメインクラスとみなされ、C
およびA
は私のコンテキストでサブクラスを表します。 クラスB
には、型がA
でなければならないパブリックメソッドがあり、そのプライベートプロパティに整数値を追加します。クラスC
はクラスA
を拡張します。
メイン関数では、マスタークラスがインスタンス化され、そのインスタンスが整数値を追加するために使用されます。これは正常に機能します。 しかし、クラスA
から派生したインスタンスで同じことをすることはできません。
なし演算子は「=」私はマスタークラスに
addSomething
関数がクラスの型を持っていることに起因していることを認識していますこれらのオペランドに
に一致するA
:それはというエラーを返します。しかし、私はそれもその子クラスで動作する必要があります。 クラスB
を変更せずに動作させる方法はありますか?
あなたは[*について読んオブジェクト・スライシング*](http://stackoverflow.com/questions/274626/what-is-object-slicing)にする必要があります。 –
Cの型の変数にCのインスタンスを代入することはできません.BはC型のインスタンスを返すことができますが、A型とCの変数に代入することができます。 – Harry
'B :: addSomething() 'はあなたの例では何も返しません。それは新しいAまたはCを構築するか、それはどのように動作するはずですか? – LiMuBei