題名の通り
c++
1class A { 2protected: 3 A* func() { 4 //メンバを変更する処理 5 return this; 6 } 7}; 8class B :public A { 9 B hoge() { 10 B temp(*this); 11 temp.func(); 12 return temp; 13 }//三行も書かないといけない 14 B moge() { return B(*this).func(); }//こんな感じでローカル変数を作成せずに一行で書きたいが 15 //戻り値がAなので不可 16}
AからBに暗黙キャストできるようにすれば万事解決かと思ったが、ダウンキャストになるのであまりしたくない。
voidも試してみたが、voidからクラスに戻すにはキャストを定義しないといけないが、定義するとどんなポインタでも受け取れてしまうのでこれもあまりしたくない。暗黙キャストを封印すれば解決するが、それはそれで書く量が増えてしまう。また、ポインタは付けたり外したりするのが面倒なのでこういう形で解決するならできれば参照を利用したい。
継承した時に、自動的に型が変わるのが理想だが、不可能ならば、どういう方法が適切か知りたいです。
解答お待ちしております。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。