作者jono103 (不說對不起)
看板C_and_CPP
標題[問題] virtual function 請教
時間Fri Jul 17 11:42:48 2015
請教各位大大
根據
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