“我敢肯定有几十个标题相同的问题。其中许多是重复的。我的也可能是重复的,但我找不到任何问题。所以我试着让它变得非常简洁、简短和简单。”
我有这样的层次结构:
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() 中的引用以获得我在指针版本中得到的结果,我将不胜感激。
谢谢你