[心得] 多型二三事
最近在研究 MFC 的 Serialization (序列化、線性化) 機制,
發現我對多型 (polymorphism) 的理解仍然是模模糊糊的~
我把我遇到的問題與想法整理一下給大家參考
一般對多型就會想到畫圖的例子
eq.
class Shape{
virtual void draw() = 0;
}
class Rectangle : public Shape{
virtual void draw() {
// draw Rectangle
}
}
class Circle : public Shape{
virtual void draw() {
// draw Circle
}
}
使用方式:
vector<Shape*> vec_shape;
vec_shape.push_back(new Rectangle());
vec_shape.push_back(new Circle());
Iterator it = vec_shape.begin();
for(;it!=vec_shape.end();++it)
it->draw(); // "直接"呼叫 virtual function
考慮下面的 code
eq.
class Doc{
public:
void func(){
cout << "[func] call ==> " ;
serial();
}
private:
virtual void serial(){
cout << "serial: Doc" << endl;
}
};
class Txt : public Doc{
private:
virtual void serial(){
cout << "serial: Txt" << endl;
}
};
Doc* d = new Txt();
d->func(); *[32m// "間接"呼叫 virtual function *[m
這上述兩行我想了好一會兒,因為我對多型的思考還局限於"畫圖"
那樣的直接呼叫 virtual fucntion , 而 d->func() 它是呼叫
non-virtual 的 Doc::func(),而 func 內部的 serial 卻是呼叫 Txt::serial()。
這樣的呼叫方式令人有點眼花撩亂、撲朔迷離~
果然不負"多型"這兩個字 XD
(MFC 中的 serialization 機制就有利用到這樣的多型方式)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.176.69
推
04/22 12:39, , 1F
04/22 12:39, 1F
推
04/22 12:54, , 2F
04/22 12:54, 2F
→
04/22 12:55, , 3F
04/22 12:55, 3F
→
04/22 12:56, , 4F
04/22 12:56, 4F
推
04/22 13:35, , 5F
04/22 13:35, 5F
推
04/22 14:57, , 6F
04/22 14:57, 6F
→
04/22 14:57, , 7F
04/22 14:57, 7F
※ 編輯: spider391 來自: 61.216.174.197 (04/22 15:57)
→
04/22 15:59, , 8F
04/22 15:59, 8F
→
04/22 16:00, , 9F
04/22 16:00, 9F
※ 編輯: spider391 來自: 61.216.174.197 (04/22 16:01)
→
04/22 16:03, , 10F
04/22 16:03, 10F
→
04/22 16:04, , 11F
04/22 16:04, 11F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章