[問題] virtual function 請教

作者: jono103 (不說對不起)   2015-07-17 11:42:48
請教各位大大
根據
http://openhome.cc/Gossip/CppGossip/VirtualFunction.html
第13行
注意將衍生類別型態的指標指向基底類別的物件基本是不可行的(雖然可以使用型態轉換
的方式來勉強達成,但並不鼓勵),衍生類別的指標並不能存取基底類別的 成員。
可以舉個簡單的例子嗎?
尤其是"衍生類別的指標並不能存取基底類別的 成員"
我的想法如下:
class car {
public:
virtual void move() { cout << "car move"<<endl;}
} ;
class Benz: public car {
public:
void move() { cout << "Benz move"<<endl;}
} ;
int main(int argc, char* argv[])
{
car c ;
Benz &rB=(Benz &)c;
rB.move();//輸出 car move, 可以存取基底類別的 成員,
//是我搞錯他的意思嗎? 請賜教 ,謝謝。
return 0;
}
作者: uranusjr (←這人是超級笨蛋)   2015-07-17 14:21:00
感覺是寫錯了, 他應該是想說不能存取 Benz::move
作者: Feis (永遠睡不著 @@)   2015-07-17 16:13:00
1. 這是 static_cast 或 dynamic_cast, 是否保證安全 ?2. 這邊恰巧是 virtual function. 你要把衍生成員拿掉至於他的說法我也是不太懂他想表達的而且就 C++ 各種無敵大絕應該是沒有不能存取這回事 XD我又重看了一次原文. 他應該是指沒有 virtual 的狀況也就是這個例子讓 move 不是 virtual function
作者: AndyLeo (打敗超越一切的人)   2015-07-17 16:35:00
是宣告Benz b; Car &c = b;這樣才是你想要練習的吧
作者: jono103 (不說對不起)   2015-07-17 21:12:00
To A:是的,練習完那個後,發現它那句話怪怪的,好奇一下To F:所以它那是指在沒有virtual的情況下,衍生類別的別的指標並不能存取基底類別的 成員。了解! 謝謝各位
作者: azureblaze (AzureBlaze)   2015-07-17 23:34:00
我覺得他想表達的是 http://ideone.com/oyfWty ?

Links booklink

Contact Us: admin [ a t ] ucptt.com