日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第二部分)...

發布時間:2025/3/15 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第二部分)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面再來看書,去理解書上說的Handler classes就簡單多了,我們大概過一下。

假設我們要寫一個Person類,如下:

1 class Person 2 { 3 private: 4 string name; 5 MyDate birthday; 6 MyAddress address; 7 8 public: 9 // fallows functions 10 // ... 11 };

這個Person類里面包含有人的名字,人的生日以及地址,還有一些沒有列出來的方法。注意到這里用到了string(它不是一個class,只是一個typedef,大多數情況下,我們認為它不會有任何改變),以及自定義的類MyDate與MyAddress,一種常見的做法是采用include頭文件,像這樣:

1 #include <string> 2 #include "MyDate.h" 3 #include "MyAddress.h"

在MyDate.h里面寫好日期類相關的成員變量與方法,而在MyAddress.h里面寫好地址類相關的成員變量與方法。但如果此后要往MyDate類或者MyAddresss類添加成員變量,那么不僅僅所有用到MyDate或者MyAddress對象的文件需要重新編譯,而且所有用到Person對象的文件也需要重編譯,一個小改動竟然會牽涉到這么多的地方!

?

可以把問題歸結為“C++并沒有把將接口從實現中分離這件事做好”,因為包含頭文件的做法很直觀很方便,用的人也很普遍,而C++并沒有對這種做法加以限制。

如果要把編譯的依賴性降低,就要換一種思路來處理,不能出現定義式,只能出現聲明式,代價是增加代碼的復雜度以及性能上的一些損失。

?

書上提到了兩種方法,第一種是采用Handler Classes(用指針指向真正實現的方法),第二種是Interface Classes(抽象基類)。

?

對于第一種Handler Class,一句話,就是.h里面不包含類的自定義頭文件,用“class 類名”的聲明方式進行代替(也要把相應的成員變量替換成指針或引用的形式),在.cpp文件里面包含類的自定義頭文件去實現具體的方法。改造之后的程序看起來是這樣子的:

1 // Person.h 2 #include <string> 3 using namespace std; 4 5 class PersonImp; 6 7 class Person 8 { 9 private: 10 //string Name; 11 //MyDate Birthday; 12 //MyAddress Address; 13 PersonImp* MemberImp; 14 15 public: 16 string GetName() const; 17 string GetBirthday() const; 18 string GetAddress() const; 19 // follows functions 20 // ... 21 }; 1 // Person.cpp 2 #include "PersonImp.h" 3 #include "Person.h" 4 5 string Person::GetName() const 6 { 7 return MemberImp->GetName(); 8 } 9 string Person::GetBirthday() const 10 { 11 return MemberImp->GetName(); 12 } 13 string Person::GetAddress() const 14 { 15 return MemberImp->GetAddress(); 16 } 1 // PersonImp.h 2 #ifndef PersonImp_H 3 #define PersonImp_H 4 5 #include <string> 6 #include "MyAddress.h" 7 #include "MyDate.h" 8 using namespace std; 9 10 class PersonImp 11 { 12 private: 13 string Name; 14 MyAddress Address; 15 MyDate Birthday; 16 17 public: 18 string GetName() const 19 { 20 return Name; 21 } 22 23 string GetAddress() const 24 { 25 return Address.ToString(); 26 } 27 28 string GetBirthday() const 29 { 30 return Birthday.ToString(); 31 } 32 }; 33 34 #endif /* PersonImp_H */ 1 // MyDate.h 2 #ifndef MY_DATE_H 3 #define MY_DATE_H 4 5 #include <string> 6 using namespace std; 7 8 class MyDate 9 { 10 private: 11 int Year; 12 int Month; 13 int DayOfMonth; 14 15 public: 16 string ToString() const; 17 } 18 #endif /* MY_DATE_H */ 1 // MyAddress.h 2 #ifndef MY_ADDRESS_H 3 #define MY_ADDRESS_H 4 5 #include <string> 6 using namespace std; 7 8 class MyAddress 9 { 10 private: 11 string Country; 12 string Province; 13 string City; 14 string Street; 15 16 public: 17 string ToString() const; 18 }; 19 20 #endif /* MY_ADDRESS_H */

這里有一點要說一下,在Person.h里面并沒有使用MyDate*和MyAddress*,而是用了PersonImp*,由PersonImp里面包含MyDate與MyAddress,這樣做的好處就是方便統一化管理,它要求PersonImp里面的方法與Person的方法是一致的。以后Person添加成員變量,可以直接在PersonImp中進行添加了,從而起到了隔離和隱藏的作用,因為客戶端代碼大量使用的將是Person,而不必關心PersonImp,用于幕后實現的PersonImp只面向于軟件開發者而不是使用者。

書上是用shared_ptr來管理PersonImp的,使資源管理上更加科學與合理。

另外,書上也提倡把class x; class xx; class xxx;的聲明放至一個名為”xxxfwd.h”的頭文件里,比如”datefwd.h”,這個頭文件里面只有聲明式,而沒有具體的類細節。也就是說,對于某個類,比如MyDate,應該分出三個文件,一個是datefwd.h,里面是一些用到的外來的class聲明式;一個是MyDate.h里面是MyDate類的結構聲明;一個是MyDate.cpp,它與MyDate.h配對,給出具體的實現細節。

?

?

?

轉載于:https://www.cnblogs.com/jerry19880126/p/3551839.html

總結

以上是生活随笔為你收集整理的读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第二部分)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人做受黄大片 | 狠狠老司机 | 五月婷婷激情视频 | 羞视频在线观看 | 在线免费观看亚洲视频 | 国产麻豆精品在线观看 | 久久综合激情 | 美国黄色片网站 | 久久久久人妻一区 | 亚洲无人区小视频 | 贵族女沦为官妓h呻吟 | 亚洲国产精品久久久久 | 天天干天天看 | 最近最新中文字幕 | 在线日韩精品视频 | 一级黄色毛毛片 | 七月婷婷综合 | 久热免费在线视频 | 性网站在线观看 | 国产欧美日韩专区 | 黑帮大佬和我的三百六十五天 | 成人国产毛片 | 亚洲激情电影在线 | 国语对白一区二区三区 | 男人天堂一区 | 国产videos| 中文字幕精品一区二区三区精品 | 麻豆蜜桃在线观看 | 欧美三级午夜理伦三级中视频 | 久久都是精品 | 啪啪免费小视频 | 在线一区二区三区四区 | 欧美人吸奶水吃奶水 | 日韩欧美不卡视频 | 黑人av| 视频一区国产 | 99在线精品免费视频 | 天堂在线中文资源 | 综合久久一区二区 | 看91| 东京热加勒比无码少妇 | 亚洲区小说区图片区qvod | 午夜少妇福利 | 成人免费自拍视频 | 精品成人网 | 亚洲视频手机在线观看 | 国产模特av私拍大尺度 | 久久尤物视频 | 伊人久综合 | 色香五月 | 中文字幕一区二区三区人妻四季 | 免费看黄禁片 | 91鲁| www伊人网 | 懂色av一区二区三区免费 | 亚洲国产无码久久 | 日韩少妇内射免费播放 | 性巴克成人免费网站 | 日韩视频一二三区 | 国产一区二区麻豆 | 国产91精品露脸国语对白 | 欧美情侣性视频 | 日日夜夜免费精品 | 国产黄色免费视频 | 91中文字幕在线视频 | 欧亚一级片 | 一区二区免费视频 | 秋葵视频污 | 爱情岛亚洲品质自拍极速福利网站 | 性盈盈影院中文字幕 | 男女午夜视频在线观看 | 欧美黑丝少妇 | 最近中文字幕在线中文视频 | 国产女人叫床高潮大片免费 | 欧美午夜视频在线观看 | 国产 欧美 日韩 一区 | av解说在线观看 | 98av视频 | 精品福利影院 | 亚洲一区av | 无码人妻丰满熟妇区五十路百度 | bt天堂av| 韩国伦理片观看 | 亚洲色图在线播放 | 国产成人在线免费观看视频 | 无码人妻精品一区二区三 | 综合精品一区 | 五月天国产视频 | 免费黄色一级 | 超碰成人在线免费观看 | 欧美日韩精品国产 | 成人精品视频一区二区三区尤物 | 伊人伊人伊人 | 黑花全肉高h湿play短篇 | 姐姐的朋友2在线 | 久久一区国产 | 日韩高清不卡一区 | 四虎影院永久地址 | 中国性xxx|