[問題] virtual function 請教

看板C_and_CPP (C/C++)作者 (不說對不起)時間10年前 (2015/07/17 11:42), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/1
請教各位大大 根據 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; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.166.10 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1437104571.A.186.html

07/17 14:21, , 1F
感覺是寫錯了, 他應該是想說不能存取 Benz::move
07/17 14:21, 1F

07/17 16:13, , 2F
1. 這是 static_cast 或 dynamic_cast, 是否保證安全 ?
07/17 16:13, 2F

07/17 16:14, , 3F
2. 這邊恰巧是 virtual function. 你要把衍生成員拿掉
07/17 16:14, 3F

07/17 16:17, , 4F
至於他的說法我也是不太懂他想表達的
07/17 16:17, 4F

07/17 16:18, , 5F
而且就 C++ 各種無敵大絕應該是沒有不能存取這回事 XD
07/17 16:18, 5F

07/17 16:22, , 6F
我又重看了一次原文. 他應該是指沒有 virtual 的狀況
07/17 16:22, 6F

07/17 16:23, , 7F
也就是這個例子讓 move 不是 virtual function
07/17 16:23, 7F

07/17 16:35, , 8F
是宣告Benz b; Car &c = b;這樣才是你想要練習的吧
07/17 16:35, 8F

07/17 21:12, , 9F
To A:是的,練習完那個後,發現它那句話怪怪的,好奇一下
07/17 21:12, 9F

07/17 21:13, , 10F
To F:所以它那是指在沒有virtual的情況下,衍生類別的
07/17 21:13, 10F

07/17 21:13, , 11F
別的指標並不能存取基底類別的 成員。了解! 謝謝各位
07/17 21:13, 11F

07/17 23:34, , 12F
我覺得他想表達的是 http://ideone.com/oyfWty ?
07/17 23:34, 12F
文章代碼(AID): #1Lg7cx66 (C_and_CPP)
文章代碼(AID): #1Lg7cx66 (C_and_CPP)