「同じタイトルの質問が何十もあると思います。それらの多くは重複しています。私のものも重複している可能性がありますが、見つかりませんでした。そのため、非常にすっきりと短く、シンプルにしようとしています。」
私はこのような階層を持っています:
class Shape {
public:
virtual void virtualfunc() { std::cout << "In shape\n"; }
};
class Circle: public Shape {
public:
void virtualfunc() { std::cout << "In Circle\n"; };
};
ポインタを使用してクラスを使用すると、期待どおりに関数が呼び出されます。
int main() {
Shape shape_instance;
Shape* ref_shape = &shape_instance ;
Circle circle_instance;
Circle* ref_circle = &circle_instance;
ref_shape = dynamic_cast<Shape*> (ref_circle);
ref_shape->virtualfunc();
}
ここで、プログラムはvirtualfunc()
派生クラスのを呼び出し、結果は当然次のようになります。In Circle
ここで、ポインターを削除し、代わりに参照を使用して、同じ結果を取得したいと思います。main()
だから私はこのように見えるように些細な変更を加えます:
int main() {
Shape shape_instance;
Shape& ref_shape = shape_instance;
Circle circle_instance;
Circle& ref_circle = circle_instance;
ref_shape = dynamic_cast<Shape&>(ref_circle);
ref_shape.virtualfunc();
}
しかし今回は、プログラムがvirtualfunc()
基本クラスのを呼び出し、結果は次のようになります。In Shape
欠落している参照の概念と、ポインターバージョンで取得した結果を取得するためにmain()の参照を変更する方法を教えていただければ幸いです。
ありがとうございました