Posted on 2007-03-13 16:02
kk 閱讀(1227)
評(píng)論(2) 編輯 收藏 引用 所屬分類(lèi):
C++
前幾次寫(xiě)了一下關(guān)于c++不支持多分派(包括雙分派)的問(wèn)題,應(yīng)該說(shuō)是學(xué)習(xí)了,本人還是個(gè)菜鳥(niǎo)啊。
發(fā)現(xiàn)我自己把多分派給搞復(fù)雜了!其實(shí)雙分派這個(gè)概念也是從學(xué)visitor模式看到的,其意義在于接受者和參數(shù)都能在運(yùn)行時(shí)決定它的類(lèi)型,但是c++只支持單分派,也就是說(shuō)參數(shù)的類(lèi)型將在編譯階段決定。所以其實(shí)想要演示一下這個(gè)問(wèn)題的話(huà),其實(shí),是非常簡(jiǎn)單的!如下:
///////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
class BE;
//B
class B
{
public:
?void virtual output(B * b){cout << "B:B" << endl;}
?void virtual output(BE * be){cout << "B:BE" << endl;}
};
class BE : public B
{
public:
?void output(B * b){cout << "BE:B" << endl;}
?void output(BE * be){cout << "BE:BE" << endl;}
};
int main()
{
??? B * p1 = new BE;
??? B * p2 = new BE;
??? p1->output(p2);
?
?return 0;
}
///////////////////////////////////////////////////////////////////
如果參數(shù)能夠在運(yùn)行時(shí)決定類(lèi)型的話(huà),那么輸出來(lái)的信息應(yīng)該是BE:BE,因?yàn)閜2的實(shí)際類(lèi)型是BE。但是,事實(shí)上輸出來(lái)的結(jié)果是BE:B。也就是說(shuō)p2的類(lèi)型被誤解為B了!這就是問(wèn)題的所在了。
把簡(jiǎn)單的事情搞復(fù)雜了,那真是折騰啊,呵呵。
Over。