国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 學院 > 開發設計 > 正文

在C++中實現屬性

2019-11-17 05:28:54
字體:
來源:轉載
供稿:網友
詳述
我們首先看一下什么是屬性。一個屬性表現為一個字段或者成員變量,但它通過read和write方法或者get和set方法暗中操作變量。 例如,若存在類A和它的屬性Count,我可以寫如下的代碼: A foo; Cout << foo.Count; 實際上Count調用它的get函數返回當前的變量值。你可以將屬性定為只讀(你可以讀取它但不能修改它)、只寫或者可讀寫,這就是使用屬性而不直接使用變量的的一個最大好處了。好了,讓我們開始來實現它: 我們需要能做如下的事: int i = foo.Count; //--調用get函數得到值 foo.Count = i; //-- 調用set函數設定值 因此,很明顯的我們需要重載''=''操作符使其能設定變量的值,同時也要重載該屬性的返回值(在下面我們將會看到的)。 我們將實現一個稱為property的類,它做的就像一個屬性,聲明如下:template <typename Container, typename ValueType, int nPropType>class PRoperty {}這個模板類表示的是我們的屬性。Container是我們要在其中包含屬性的類變量,set和get方法以及屬性的類的類型。ValueType是內部變量即要定義的屬性的類型,nPropType定義屬性的讀寫標志:只讀、只寫或可讀寫。現在我們需要一個指向從包含屬性的類Container到屬性類property的set和get方法的指針,同時重載''=''操作符以使得屬性能象變量起那樣作用。現在我們來看property類的全部定義#define READ_ONLY 1#define WRITE_ONLY 2#define READ_WRITE 3template <typename Container, typename ValueType, int nPropType>class property{public:property(){ m_cObject = NULL; Set = NULL; Get = NULL;}//-- 將m_cObject指向包含屬性的container類 --void setContainer(Container* cObject){ m_cObject = cObject;}//-- 設定可改變屬性值的set成員函數 --void setter(void (Container::*pSet)(ValueType value)){ if((nPropType == WRITE_ONLY) (nPropType == READ_WRITE)) Set = pSet; else Set = NULL;}//-- 設定可檢索屬性值的get成員函數 --void getter(ValueType (Container::*pGet)()){ if((nPropType == READ_ONLY) (nPropType == READ_WRITE)) Get = pGet; else Get = NULL;}//-- 重載''=''號操作符使其能用set成員設定屬性值--ValueType operator =(const ValueType& value){ assert(m_cObject != NULL); assert(Set != NULL); (m_cObject->*Set)(value); return value;}//-- 使屬性類能轉換為內部類型成為可能--operator ValueType(){ assert(m_cObject != NULL); assert(Get != NULL); return (m_cObject->*Get)();}private: Container* m_cObject; //-- 指向包含屬性的類模塊 -- void (Container::*Set)(ValueType value); //-- 指向set成員函數的函數指針 -- ValueType (Container::*Get)(); //-- 指向get成員函數的函數指針 --}; 現在讓我們來一段一段地看這些代碼:
在下面的代碼中,僅僅將Container指針指向一個有效的包含屬性的實例。void setContainer(Container* cObject){ m_cObject = cObject;}下面的代碼,設定指針指向包含屬性的類中的set和get成員函數,其set和get成員函數度有,唯一的限制即set成員函數必須有一個ValueType型的參數并無返回值,get成員函數沒有參數,但要返回ValueType型值。//-- 設定可改變屬性值的set成員函數 --void setter(void (Container::*pSet)(ValueType value)){ if((nPropType == WRITE_ONLY) (nPropType == READ_WRITE)) Set = pSet; else Set = NULL;}//-- 設定可檢索屬性值的get成員函數 --void getter(ValueType (Container::*pGet)()){ if((nPropType == READ_ONLY) (nPropType == READ_WRITE)) Get = pGet; else Get = NULL;}在如下的代碼中,第一部分是''=''操作符的重載,它調用包含屬性的類中的set函數設定其屬性的值。第二部分則為了使整個屬性類象ValueType類型一樣起作用,所以它返回包含屬性的類中get函數的返回值。//-- 重載''=''號操作符使其能用set成員設定屬性值--ValueType operator =(const ValueType& value){ assert(m_cObject != NULL); assert(Set != NULL); (m_cObject->*Set)(value); return value;}//-- 使屬性類能轉換為內部類型成為可能--operator ValueType(){ assert(m_cObject != NULL); assert(Get != NULL); return (m_cObject->*Get)();}
現在我們來看看怎樣使用它:
如下所示,在PropTest類中定義了一個叫做Count的簡單屬性。Count的實際值將保存到或檢索之在PropTest的私有成員變量"m_nCount"中,通過PropTest的get和set方法。get和set方法可以使用任何的變量名字,只需他們的地址能被傳遞到property類中,如下面的PropTest構造函數里面的代碼般,代碼行" property<PropTest, int, READ_WRITE> Count; "讓我們在PropTest中得到可讀寫的int型的Count屬性。現在你可以使用如一般的成員變量般使用使用Count屬性了,但實際上你是間接地調用它set和get方法。
要使Count屬性能成功工作,必須先在PropTest的構造函數里面對其進行初始化。 class PropTest{public: PropTest() { Count.setContainer(this); Count.setter(&PropTest::setCount); Count.getter(&PropTest::getCount); } int getCount() { return m_nCount; } void setCount(int nCount) { m_nCount = nCount; } property<PropTest,int,READ_WRITE> Count;private: int m_nCount;};如下所示,你可以象使用普通變量一樣使用Count屬性。int i = 5,j;PropTest test;test.Count = i; //-- 調用set函數 --j= test.Count; //-- 調用get函數 --要使用只讀的屬性,你可以創建如下的property實例:property<PropTest,int,READ_ONLY > Count;要使用只寫的屬性,你可以創建如下的property實例:property<PropTest,int,WRITE_ONLY > Count; 注重:假如你將某一屬性設為只讀,當你對其賦值時,將引發assertion診斷。同理,當讀取只寫的屬性時
也同樣會引發assertion診斷。

小結
本文展示了在C++只用標準的C++特性而不使用其他任何的擴展技術來實現屬性。當然,直接使用set和get函數效率
要更高些,因為本文中的方法需要為每一個屬性定義一個property類實例。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产成人久久精品77777| 亚洲欧美精品日韩欧美| 欧美视频免费一区二区三区| 依依成人在线| 亚洲精品在线播放视频| 欧美xxxxx性| 日本一本久久| 国产美女在线一区二区三区| 国产污污在线观看| 在线一区二区三区精品| 三级小说一区| 国产网友自拍视频导航网站在线观看| 中文字幕网站视频在线| 精品一区二区三区在线观看l| www.狠狠色.com| 国产区视频在线播放| www在线视频| 国产黄色大片在线观看| 欧美黑人乱大交| 91精选福利| 国产剧情av在线| 精品无吗乱吗av国产爱色| 黄色电影网站在线观看| av丝袜在线| 国产国语**毛片高清视频| 超碰免费在线播放| 小说区乱图片区| 国产精品爱久久久久久久小说 | 在线免费观看黄色片| 国产免费网址| 九色成人在线| 久草一本av| 久热av在线| 伊人电影在线观看| a√在线视频| 精品国产高清a毛片无毒不卡 | 欧美日韩亚洲第一页| 精品一二三区视频| 91中文字幕网| 69国产精品视频| 国产www网站| 精品久久久久一区二区三区| 91嫩草在线播放| 在线一区二区三区精品| 在线观看的av| 97在线免费| 亚洲国产精品区| www.国产精| 99视频免费| 国产极品嫩模在线视频一区| 国产精彩视频在线观看免费蜜芽| 国产人成精品| 亚洲国产日韩在线人成电影| 亚洲视频精品在线观看| www免费在线观看视频| а√最新版在线天堂| 国产主播福利在线| 国产黄色片在线播放| 在线播放av网站| 国产在线激情视频| 国内外激情在线| 国产视频1区| 精品国产免费观看一区| 日本动漫同人动漫在线观看| 国产美女高潮| 天天艹天天操| 天天操夜夜摸| av在线中文| 国产精品伦一区二区三区级视频频| 在线一二三区| 最好2018中文免费视频| 精品国产免费第一区二区| 欧美aaa一级片| 国产福利在线免费观看| 青青国产在线| 国产成人亚洲综合小说区| 本道综合精品| 国产黄在线看| 黄色国产网站在线观看| 伊人狠狠av| 国产l精品国产亚洲区在线观看| 免费观看v片在线观看| 精品极品三级久久久久| 日韩av成人| 成年网在线观看免费观看网址| 在线视频观看国产| 国产精品扒开做爽爽爽的视频| 欧美精品小视频| 在线观看国产视频| 国产人成精品| 男女午夜视频在线观看| av色在线观看| 在线国产一区二区三区| 在线中文资源天堂| 国产第一页在线视频| 国产高清在线视频| 国产区高清在线| 91福利在线免费| 国产理论电影在线| 九九热视频免费观看| 欧美色欧美亚洲另类二区精品| 精品国产高清自在线一区二区三区| 中文字幕视频在线免费| 天堂在线视频| 国产精品扒开做爽爽爽的视频| 黄污在线观看| 久久91精品视频| 牛牛精品视频在线| 久久99国产视频| 国产精品一区二区资源| 九色福利视频| 国产精品外围在线观看| 国产网站麻豆精品视频| 精品视频一二三| 日本在线免费中文字幕| 国产免费人人看| 国产午夜三区视频在线| 中文av在线播放| 日本aⅴ写真网站免费| 国产精品一区二区三区高清在线 | 日本成人在线播放| 丁香婷婷激情| 国产高清视频在线观看| 亚洲天堂电影在线观看| 人成在线免费视频| 国产网站麻豆精品视频| 在线免费观看黄色片| 麻豆国产在线视频| 欧美日韩久久中文字幕| 最近中文av字幕在线中文| 国产情侣高潮对白| 99高清免费国产自产拍| 免费a级毛片在线播放| 成人av小说网| 在线欧美一级视频| 中文字幕在线免费看| 青青在线视频| av亚洲在线| 国产成在线观看免费视频| 国产专区在线| 天天插天天狠天天透| 18激情网站| 国产午夜精品久久久久免费视| 午夜在线不卡| 中文字幕4区| 91中文字幕| 国产激情视频一区二区三区| 国产免费av高清在线| 伊人网站在线| 国产成在线观看免费视频| 最好看更新中文字幕| 丁香花高清在线观看完整版 | 精品欧美不卡一区二区在线观看| www.操操操| 2021天堂中文幕一二区在线观| 国产在线小视频| 欧美日韩一区二区三区在线播放| 精品国产高清自在线一区二区三区| www亚洲天堂| 日本高清中文字幕| 91青青在线视频| 国产精品视频福利一区二区| 国产中文在线视频| 青青国产在线| www中文字幕在线观看| 日本综合一区二区三区| 一本免费视频| 欧美日韩综合高清一区二区| www.九九热.com| 久久久久国产精品嫩草影院| 超碰免费97在线观看| 九九热在线视频观看| 国产在线一二| 二区中文字幕| 中文字幕免费在线视频| 国产青草视频在线观看视频| 国产精品入口免费麻豆| 国产成人无吗| 国产私人尤物无码不卡| 国产探花在线观看| 国产夫妻视频| av在线免费播放网站| 丁香婷婷在线| 在线久久视频| 国产69久久| 亚洲一区免费在线| 中文字幕日本在线| 香蕉视频网站在线播放| 牛牛在线精品视频| 国产视频精选在线| 麻豆福利在线观看| 国产成人久久精品77777| 本道综合精品| 国产盗摄一区二区| 国产麻豆视频| 日本成a人片在线观看| 91中文字幕| 国产系列在线观看| 麻豆福利在线观看| 午夜在线观看91|