私はこのような何かをしよう:C++継承されオーバーライドされた基本クラスの属性の値にアクセスする方法は?
class A{
public:
A(){number = 1;}
int number;
};
class B : public A{
public:
B(){number = 2;}
};
class Base {
public:
Base() {myAttribute = new A();}
int returnAttrNumber(){return myAttribute->number;}
A *myAttribute;
};
class Inherited : public Base{
public:
Inherited(){myAttribute = new B();}
B *myAttribute;
};
int main()
{
Inherited *i = new Inherited();
std::cout << i->returnAttrNumber(); // outputs 1, because it gets the A not the B. I want it to output 2, to get the B object in returnAttrNumber()
}
ので、クラスベース継承オブジェクトAがA-派生オブジェクトBを保持して保持し、私は、基本クラスのメソッドを呼び出そうが、私
(返すそれがこのケースでの数字です)、それは可能な限り対応するオブジェクトのhirarchyにダウンキャスト(static_castをなし またはdynamic_castを)、その後、Bのオブジェクトではなく、Aを取ると、ものを行うことですしたいですC++の基底クラスからのダウンキャスティングを大きな困難なしに行う方法はありますか? ありがとうございます!
現実的なコードを投稿してください。詳細は重要です。 – juanchopanza
"これは、BaseではなくInheritedに格納された値を変更する必要があります。値を変更できるメンバーは1人だけです。ファンタジーコードを使用しないでください。これは文法エラーが多すぎて実際の質問から逸脱している – user463035818
はい、申し訳ありませんが、修正しました。今のところ動作します – mep