實(shí)現(xiàn)C++接口映射淺析
C++接口用來(lái)定義一種程序的協(xié)定。實(shí)現(xiàn)接口的類或者結(jié)構(gòu)要與接口的定義嚴(yán)格一致。本文我們來(lái)了解顯式實(shí)現(xiàn)C#接口成員的主要方法,下面進(jìn)行詳細(xì)說(shuō)明介紹。。。
映射,數(shù)學(xué)上表示一一對(duì)應(yīng)的函數(shù)關(guān)系。C++接口映射的含義也是一樣,接口通過(guò)類來(lái)實(shí)現(xiàn),那么對(duì)于在接口中定義的每一個(gè)成員,都應(yīng)該對(duì)應(yīng)著類的一個(gè)成員來(lái)為它提供具體的實(shí)現(xiàn)。
類的成員及其C++接口映射成員之間必須滿足下列條件:
◆如果A和B都是成員方法,那么A和B的名稱、類型、形參表(包括參數(shù)個(gè)數(shù)和每一個(gè)參數(shù)的類型)都應(yīng)該是一致的。
◆如果A和B都是屬性,那么A和B的名稱、類型應(yīng)當(dāng)一致,而且A和B的訪問(wèn)器也是類似的。但如果A不是顯式接口成員執(zhí)行體,A允許增加自己的訪問(wèn)器。
◆如果A和B都是時(shí)間那么A和B的名稱、類型應(yīng)當(dāng)一致。
◆如果A和B都是索引指示器,那么A和B的類型、形參表(包括參數(shù)個(gè)數(shù)和每一個(gè)參數(shù)的類型)應(yīng)當(dāng)一致。而且A和B的訪問(wèn)器也是類似的。但如果A不是顯式接口成員執(zhí)行體,A允許增加自己的訪問(wèn)器。
那么,對(duì)于一個(gè)C++接口成員,怎樣確定由哪一個(gè)類的成員來(lái)實(shí)現(xiàn)呢?即一個(gè)接口成員映射的是哪一個(gè)類的成員?在這里,我們敘述一下接口映射的過(guò)程。假設(shè)類C實(shí)現(xiàn)了一個(gè)接口IInterface,Member是接口IInterface中的一個(gè)成員,在定位由誰(shuí)來(lái)實(shí)現(xiàn)接口成員Member,即Member的映射過(guò)程是這樣的:
1、如果C中存在著一個(gè)顯式接口成員執(zhí)行體,該執(zhí)行體與接口IInterface 及其成員Member相對(duì)應(yīng),則由它來(lái)實(shí)現(xiàn)Member 成員。
2、如果條件(1)不滿足,且C中存在著一個(gè)非靜態(tài)的公有成員,該成員與接口成員Member相對(duì)應(yīng),則由它來(lái)實(shí)現(xiàn)Member 成員。
3、如果上述條件仍不滿足,則在類C定義的基類列表中尋找一個(gè)C 的基類D,用D來(lái)代替C。
4、重復(fù)步驟1-3 ,遍歷C的所有直接基類和非直接基類,直到找到一個(gè)滿足條件的類的成員。
5、如果仍然沒(méi)有找到,則報(bào)告錯(cuò)誤。
下面是一個(gè)調(diào)用基類方法來(lái)實(shí)現(xiàn)接口成員的例子。類Class2 實(shí)現(xiàn)了C++接口Interface1,類Class2 的基類Class1 的成員也參與了接口的映射,也就是說(shuō)類Class2 在對(duì)接口Interface1進(jìn)行實(shí)現(xiàn)時(shí),使用了類Class1提供的成員方法F來(lái)實(shí)現(xiàn)接口Interface1的成員方法F:
【編輯推薦】