Main関数部のここですのコードなのですが設計上誤っているのでダウンキャストはするべきではないとありますが
あえてその間違ているダウンキャストのやり方を教えてもらいたいです。
適切な継承クラスのクラス間のユーザー定義変換がありませんとあるのですがこの定義方法を教えてくれますでしょうか?
調べましたがC#の記事しか出て来ないため質問しました。https://ufcpp.net/study/csharp/oo_operator.html
class base { public: base() { cout << "base コンストラクタ\n"; } virtual ~base() { cout << "~base デストラクタ\n"; } void bfun() { cout << "基底関数\n"; } void tf() { cout << "基底クラス tf()\n"; } virtual void vf() { cout << "仮想基底f\n"; }; }; class derived : public base { public: derived():base() { cout << "derived コンストラクタ\n"; } ~derived() { cout << "~derived デストラクタ\n"; } void tf() { cout << "派生クラス tf()\n"; } void dfun() { cout << "派生関数\n"; } virtual void vf() { cout << "仮想派生f\n"; } }; int main() { derived *d1 = new derived(); derived *d2 = new derived(); base ba; derived d; d = (derived)ba;//ここです。 int _r = _getch(); return 0; }
「設計上誤っているダウンキャスト」をどのような意味で使われていますか? [A] C++ソースコードとしては妥当なのだがクラス設計があまり適切でない なのか、[B] とにかくダウンキャストのように書けてしまえばよい かで意味が異なります。[B] のソースコードは一見動作するように見えて、単にバグっているC++プログラムになります(場合によっては "未定義動作" = 何が起きても知らないよ になります)。
