アップキャスト(親から子へ)に関するstatic_castを理解しようとしています。私には意味がない。私は子供を親に投げ込み、それを実証しなければならない。いくつかのコードをオンラインで参照して本を参照すると、これは私が持っているものです。static_castとその目的をデモンストレーションしますか?
Mustang *myMustang = new Mustang;
Car *myCar = new Car;
myMustang = static_cast<Mustang*>(myCar);
しかし、率直に言っても何も表示されません。私はそれがキャストされたという確証はありません。私は、Carクラスにパブリック関数を追加しようとしましたが、それはその子から呼び出されましたが、明らかに継承されています。
これは、現在、このタイプのアップキャストでは目的が見られないことを意味しています。
私の質問は、これをキャストしてもどうやって検証するのですか。このキャストのタイプ入力の目的は何ですか?
update:このタイプのキャストでは経験がなく、仮想関数があいまいなため、答えは少し難しかったです。私の友人が私を助けてくれました。以下は他の誰かが同じ問題を抱えている場合のコードです。
class Car {
public:
virtual void Greeting() { cout << "I am a car." << endl; };
};
class Focus : public Car{
public:
void FocusGreeting() { cout << "Hello, I am a Ford Focus." << endl; }
};
class Mustang : public Car {
public:
virtual void Greeting() override { cout << "I am a Ford Mustang." << endl; }
};
// in main
Mustang* myMustang = new Mustang;
Car *myCar = new Car;
myCar->Greeting();
cout << "Now ";
myCar = static_cast<Car*>(myMustang);
myCar->Greeting();
あなたはダウンキャスティングしていますが、アップキャストしていません。 –
また、派生型によってオーバーライドできる仮想関数を使用してみてください。 –