看板 C_and_CPP 關於我們 聯絡資訊
請教各位大大 根據 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
uranusjr: 感覺是寫錯了, 他應該是想說不能存取 Benz::move 07/17 14:21
Feis: 1. 這是 static_cast 或 dynamic_cast, 是否保證安全 ? 07/17 16:13
Feis: 2. 這邊恰巧是 virtual function. 你要把衍生成員拿掉 07/17 16:14
Feis: 至於他的說法我也是不太懂他想表達的 07/17 16:17
Feis: 而且就 C++ 各種無敵大絕應該是沒有不能存取這回事 XD 07/17 16:18
Feis: 我又重看了一次原文. 他應該是指沒有 virtual 的狀況 07/17 16:22
Feis: 也就是這個例子讓 move 不是 virtual function 07/17 16:23
AndyLeo: 是宣告Benz b; Car &c = b;這樣才是你想要練習的吧 07/17 16:35
jono103: To A:是的,練習完那個後,發現它那句話怪怪的,好奇一下 07/17 21:12
jono103: To F:所以它那是指在沒有virtual的情況下,衍生類別的 07/17 21:13
jono103: 別的指標並不能存取基底類別的 成員。了解! 謝謝各位 07/17 21:13
azureblaze: 我覺得他想表達的是 http://ideone.com/oyfWty ? 07/17 23:34