「我相信有相同題目的數十個問題,其中很多都是重複的,我也可能是重複的,但我找不到任何東西,所以我儘量使它非常簡潔。如何用C++中的引用替換指針?
我有一個這樣的層次:
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()中的引用以獲得指針版本中的結果。
謝謝
你爲什麼又在這條線形狀和ref_shape = dynamic_cast的(ref_circle)宣佈ref_shape ;? –
taocp
2013-03-14 03:56:11
對不起,打字錯誤。我將只編輯 – rahman 2013-03-14 03:57:15
沒有必要對基礎進行'dynamic_cast',這是一個隱式轉換。 – 2013-03-14 04:09:48