資源描述:
《類內(nèi)嵌和類合成》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、內(nèi)嵌類與類和成內(nèi)嵌類的定義類的成員可以是某中類型的變量或函數(shù)。當(dāng)然類的成員也可以是自定義的數(shù)據(jù)類型。例如:#include"stdio.h"#include"memory.h"structEmbedStruct{//在結(jié)構(gòu)體中默認(rèn)為公有成員intflag;floatresult;};classContainType{public://在類的內(nèi)部定義一個(gè)結(jié)構(gòu)類型作為公有成員。structEmbedStruct{intflag;floatresult;};ContainType(){}ContainType(
2、unsignedcharcLink){m_link=cLink;}private:unsignedcharm_link;};intmain(intargc,char**argv){//使用全局類型標(biāo)識(shí)符::EmbedStructgEm;//通過類名表示使用ContainType定義的公有類型ContainType::EmbedStructeMb;eMb.flag=82;eMb.result90;memccpy(&gEm,&eMb,sizeof(gEm));printf("%d%8.2f",gEm.fl
3、ag,gEm.result);return0;}如上例中在ContainType中,定義了一個(gè)結(jié)構(gòu)體類型EmbedStruct做為公有成員,同樣也可以定義類,函數(shù)指針、枚舉類型。如果在一個(gè)類的定義中還嵌套其他類的定義,被嵌套的類成為內(nèi)嵌類。內(nèi)嵌類的使用方法:因?yàn)轭愋统蓡T與類的實(shí)例相對(duì)獨(dú)立,所以在主函數(shù)中可以通過類名標(biāo)識(shí)來使用這一類型。類型成員也遵循訪問權(quán)限控制。在定義數(shù)據(jù)類型成員的同時(shí),也可以用該類型定義的成員變量。#include"stdio.h"classContain{public://定義一個(gè)類做
4、為公有成員classEmbed{public:Embed(){}Embed(intflag){m_flag=flag;}intGetVaule()const{returnm_flag;}Embed&operator=(constEmbed&bed);voidshowLink(Contain*pCon);private:intm_flag;}m_bed;//將內(nèi)嵌類定義為父類的友類friendclassEmbed;public:Contain(){}Contain(intflag,unsignedcharc
5、Link):m_bed(flag){m_link=cLink;}//在類中可以隨意應(yīng)用自定義的類型成員EmbedGetEmbedMember()const{returnm_bed;}protected:unsignedcharm_link;};//在外部定義內(nèi)嵌類的成員函數(shù),要加雙標(biāo)識(shí)符限定范圍哦Contain::Embed&Contain::Embed::operator=(constEmbed&bed){m_flag=bed.m_flag;return*this;}voidContain::Embed
6、::showLink(Contain*pCon){if(m_flag)printf("%d",pCon->m_link);elseprintf("%c",pCon->m_link);}intmain(){Contain::Embedbed;Containcon(73,'A');con.m_bed.showLink(&con);bed=con.m_bed;printf("%d",bed.GetVaule());return0;}內(nèi)嵌類的應(yīng)用價(jià)值內(nèi)嵌類被封裝在包容類中,外部不能對(duì)它直接訪問,也避免
7、了和它產(chǎn)生名字沖突??梢哉f內(nèi)嵌類對(duì)于外部是不可見的。同時(shí),內(nèi)嵌類雖然是包容類的成員,但二者訪問是完全對(duì)立的,不存在任何耦合,其中一方的定義變化,不影響另一方。針對(duì)內(nèi)嵌類的以上特點(diǎn),可以用它封裝一個(gè)數(shù)據(jù)處理的用戶接口,使數(shù)據(jù)處理與數(shù)據(jù)的標(biāo)識(shí)分離。內(nèi)嵌類就象一個(gè)工作,用戶通過內(nèi)嵌類實(shí)現(xiàn)對(duì)包容類數(shù)據(jù)的處理。內(nèi)嵌類的定義可以根據(jù)用戶的需求進(jìn)行修改、增加刪除,這對(duì)包容類每有什么影響;包容類可以根據(jù)處理對(duì)象的不同,封裝不同的數(shù)據(jù)集。類的合成如果一個(gè)類包含一個(gè)內(nèi)嵌類,那么也要包含該內(nèi)嵌類的對(duì)象作為成員變量,否則內(nèi)嵌類是
8、豪無意義的。一個(gè)類中包含另一類的對(duì)象做為數(shù)據(jù)成員變,叫做類的合成