??? 記得在剛開(kāi)始學(xué)習(xí)C++的時(shí)候,有一條規(guī)定,就是在基類(lèi)中聲明的虛函數(shù),在子類(lèi)中重載時(shí)不要改變這個(gè)函數(shù)的作用域。例如在基類(lèi)public中聲明的虛函數(shù),在其子類(lèi)中重載時(shí)還應(yīng)該時(shí)public的。
??? 但我在看DirectShow的代碼中發(fā)現(xiàn)有的子類(lèi)改變了父類(lèi)的虛函數(shù)的作用域。先開(kāi)始想,那幫人怎么會(huì)犯這么低級(jí)的錯(cuò)誤,后來(lái)一想應(yīng)該有其原因。在思考后,覺(jué)得改變了父類(lèi)虛函數(shù)的作用域是一件很有趣的事情。如果子類(lèi)的實(shí)例被轉(zhuǎn)換成父類(lèi),這個(gè)函數(shù)是可以調(diào)用的,而當(dāng)他是子類(lèi)時(shí)是不行的。
??? 突然我發(fā)現(xiàn),這樣就要了一個(gè)層次的關(guān)系,在父類(lèi)一層,何子類(lèi)一層。當(dāng)一個(gè)用戶(hù)在不同的層次時(shí),操作的權(quán)利是不同的。它起到了某種限制。
呵呵,好精致的玩意。
posted on 2006-09-15 22:13
walkspeed 閱讀(647)
評(píng)論(2) 編輯 收藏 引用