freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

com接口與對(duì)象(編輯修改稿)

2024-11-04 21:52 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 。 } }。 class IPersist { virtual void Delete()=0。 virtual void *Dynamic_cast(const char *psz)=0。 virtual void Save(const char *pszFile)=0。 virtual void Load(const char *pszFile)=0。 }。 對(duì)象實(shí)現(xiàn)多個(gè)接口 (續(xù)五 ) ?一個(gè)對(duì)象實(shí)現(xiàn)兩個(gè)沒(méi)有繼承關(guān)系的接口 include class CMyString : public IString2, public IPersist {...} void *CMyString::Dynamic_cast(const char *psz) { if (strcmp(psz,IString)==0) return static_castIString *(this)。 else if (strcmp(psz,IString2)==0) return static_castIString2 *(this)。 else if (strcmp(psz,IPersist)==0) return static_castIPersist *(this)。 return NULL。 } 對(duì)象實(shí)現(xiàn)多個(gè)接口 (續(xù)六 ) void main() { IString *p = CreateString(Hello)。 if (p) { IString2 *p2。 IPersist *p3。 const char*psz = pFind(llo)。 int n = pLength()。 if ((p2=(IString2 *)pDynamic_cast(IString2))) char c = p2FindAt(3)。 if ((p3=(IPersist *)pDynamic_cast(IPersist))) p3Save(c:\\temp\\)。 pDelete()。 } }。 對(duì)象實(shí)現(xiàn)多個(gè)接口 (續(xù)七 ) 接口的轉(zhuǎn)換 ?每個(gè)接口提供一個(gè)用于接口轉(zhuǎn)換的函數(shù) ?對(duì)象實(shí)現(xiàn)接口的時(shí)候,可以使用 C++編譯器本身提供的類型轉(zhuǎn)換功能 ?每個(gè)接口的 Dynamic_cast函數(shù)決定了客戶可以訪問(wèn)其他哪些接口 對(duì)象的生命周期管理 ?對(duì)象只需要被刪除一次。每個(gè)接口都有Delete函數(shù)?還是只有一個(gè)接口才有?進(jìn)一步, 什么時(shí)候刪除對(duì)象? ?客戶可能擁有多個(gè)指向?qū)ο蟮囊茫?每個(gè)引用各有自己的 lifetime ?每個(gè)引用從被有效賦值開始,一直到生命周期結(jié)束,這期間被稱為: outstanding reference 未完結(jié)引用 ?客戶管理每個(gè)引用的 lifetime, 也就是說(shuō)它要 顯式 地告訴對(duì)象引用無(wú)效了 對(duì)象的生命周期管理 (續(xù) ) ?每個(gè)對(duì)象要管理一個(gè)被稱為引用計(jì)數(shù)(reference count)的整數(shù)值。 ?為了有效地管理對(duì)象的生命周期,它應(yīng)該提供一些規(guī)則和操作,供客戶遵守和使用: ?規(guī)則:保持引用計(jì)數(shù)的確切含義,也就是記錄當(dāng)前 outstanding reference的數(shù)目。引用計(jì)數(shù)從 0開始,首次把接口遞交給客戶時(shí)為 1,以后由客戶管理,當(dāng)引用計(jì)數(shù)回到 0時(shí),刪除自己。 ?當(dāng)客戶通過(guò)復(fù)制獲得新的接口指針時(shí),引用計(jì)數(shù)加一,當(dāng)某個(gè)接口不用時(shí),減一 引用計(jì)數(shù)的兩個(gè)操作 ?我們用引用計(jì)數(shù)的兩個(gè)管理操作代替原來(lái)簡(jiǎn)單的Delete函數(shù) class IString { virtual void DestroyPointer()=0。 virtual void *Dynamic_cast(const char *psz)=0。 virtual void DuplicatePointer()=0。 virtual const char*Find(const char *psz)=0。 virtual int Length()=0。 }。 class IPersist { virtual void DestroyPointer()=0。 virtual void *Dynamic_cast(const char *psz)=0。 virtual void DuplicatePointer()=0。 virtual void Save(const char *pszFile)=0。 virtual void Load(const char *pszFile)=0。 }。 實(shí)現(xiàn)引用計(jì)數(shù)的兩個(gè)操作 CMystring::CMyString(const char * psz) : m_psz( new char[psz ? strlen(psz)+1 :1]), m_refcount(0) { if ( psz ) strcpy(m_psz,psz)。 else m_psz[0] = 0。 } void CMyString::DestroyPointer() { if (0m_refcount) m_refcount。 if (0==m_refcount) delete this。 } void CMyString::DuplicatePointer() { m_refcount++。 } include class CMyString : public IString2, public IPersist { private: char *m_psz。 long m_refcount。 public: CMyString(const char * psz)。 ~CMyString()。 void DuplicatePointer()。 void DestroyPointer()。 void *Dynamic_cast(const char *)。 const char*Find(const char *psz)。 int Length()。 char FindAt(int index)。 void Save(const char *pszFile)。 void Load(const char *pszFile)。 }。 接口轉(zhuǎn)換時(shí)刻相當(dāng)于接口復(fù)制 void *CMyString::Dynamic_cast(const char *psz) { void *p = NULL。 if (strcmp(psz,IString)==0) p = static_castIString *(this)。 else if (strcmp(psz,IString2)==0) p = static_castIString2 *(this)。 else if (strcmp(psz,IPersist)==0) p = static_castIPersist *(this)。 if (NULL!=p) m_refcount++。 return p。 } 客戶管理對(duì)象的生命周期 void main() { IString *p = CreateString(Hello)。 if (p) { IString2 *p2。 IPersist *p3。 const char*psz = pFind(llo)。 int n = pLength()。 if ((p2=(IString2 *)pDynamic_cast(IString2))) { char c = p2FindAt(3)。 p2DestroyPointer()。 } if ((p3=(IPersist *)pDynamic_cast(IPersist))) { p3Save(c:\\temp\\)。 p3DestroyPointer()。 } pDestroyPointer()。 } }。 extern C void *CreateString(const char *psz, const char *pszinterface) { void *pret = NULL。 CMyString *p = new CMyString(psz)。 if (NULL!=p) { pret= pDynamic_cast(pszinterface)。 if (NULL==pret) delete p。 } return pret。 } 修改創(chuàng)建
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1