青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

void main() { }

Hello ,world !

常用鏈接

統(tǒng)計

最新評論

Effective C++ 學習歷程001

      自從大一下接觸C++面向對象程序設計,我就對一直在學習C++ 這門語言,當然了也一直很喜歡C++。在之前剛剛開始C語言程序設計時,自己還不喜歡編程這門學問。后來,慢慢喜歡上編程,正是跟隨著C++ 語言的慢慢學習與積累的。嗯,我很喜歡C++這門語言!
      那就從一本摯愛的圖書《Effective C++ 》開始吧,也當是給“Effective C++ 學習歷程”做個簡單的開始。
  1 namespace testItem01
  2 {
  3 }//namespace testItem01
  4 // ====================================================================
  5 // --- 條款02:盡量以const,enum,inline替換 #define
  6 // 注意:
  7 // 1    對于單純變量,最好以const 對象或是 enumS 替換 #defineS 。。。
  8 // 2    對于形似函數(shù)的 宏(mactos),最好改用inline(結合 template) 函數(shù)替換 #defineS 
  9 // 3
 10 namespace testItem02
 11 {
 12     template <typename T>
 13     inline T   MAX_TEMP(const T& a ,const T& b)
 14     { return (a>? a : b) ; }
 15     void exampleFunc()
 16     {
 17         cout << " define constant ,using #define ,enum , const Type  \n" ;
 18         #define DEFINE_NUM  10
 19         enum { ENUM_NUM = 10  } ; // ..
 20         const int CONST_NUM = 10 ;
 21         cout << " DEFINE_NUM  ENUM_NUM  CONST_NUM :"
 22              << DEFINE_NUM << setw(5<< ENUM_NUM << setw(5<< CONST_NUM << "\n" ;
 23         /*
 24         char    str1[DEFINE_NUM] ; // okokok 
 25         char    str2[ENUM_NUM] ;// okokok 
 26         char    str3[CONST_NUM] ;// okokok 
 27         */
 28         // #define 導致的錯誤  ..
 29         cout << " Error , use #define  \n" ;
 30         #define MAX_DEFINE(a,b) ((a) > (b) ? (a) : (b))
 31         int a = 5, b = 0;
 32         cout << " a = 5, b = 0; MAX_DEFINE(++a, b): " ;
 33         cout << MAX_DEFINE(++a, b) << "\n" ;// a 的值增加了2次
 34         cout << " a: " << a << " ,MAX_DEFINE(++a, b+10) : " ;
 35         cout << MAX_DEFINE(++a, b+10<< "\n" ; // a 的值只增加了1次
 36         cout << " a: " << a << "\n" ;
 37         cout << " OKOKOK , use inline template  \n" ;
 38         a = 5, b = 0;
 39         cout << " a = 5, b = 0; MAX_TEMP(++a, b): " ;
 40         cout << MAX_TEMP(++a, b) << "\n" ;// a 的值增加了2次
 41         cout << " a: " << a << " MAX_TEMP(++a, b+10) : " ;
 42         cout << MAX_TEMP(++a, b+10<< "\n" ; // a 的值只增加了1次
 43         cout << " a: " << a << "\n" ;
 44     }
 45 }//namespace testItem02
 46 // ====================================================================
 47 // --- 條款03:盡量使用 const 
 48 // 注意:
 49 // 1    將某些東西聲明為 const可以幫助編譯器偵測出錯誤語法。const可被施加于任何作用域內的
 50 //      對象、函數(shù)參數(shù)、函數(shù)返回類型、成員函數(shù)本體 
 51 // 2    編譯器強制執(zhí)行(實施)bitwise constness 。但你編寫程序時應該使用“概念上的常量性”(conceptual constness)
 52 // 3    當 const 和 non-const成員函數(shù)有著實質等價的實現(xiàn)時,令non-const版本去調用const版本可避免代碼重復 。
 53 namespace testItem03
 54 {
 55     void func1(const char* pChar) { cout << " void func1(const int* pInt): " << pChar << "\n" ; } //
 56     void func2(char const * pChar)
 57     { cout << " void func2(int const * pInt): " << pChar << "\n" ;} // the same as func1 
 58     // -------------------------
 59     class TextBlock
 60     {
 61     private:
 62         std::string text_ ;
 63     public:
 64         TextBlock() {}
 65         //TextBlock(const char* str) : text_(str) {} //
 66         TextBlock(const std::string& str) : text_(str) {} //
 67         // 
 68         const char& operator [](std::size_t pos) const
 69         {
 70             cout << " const char& operator [](std::size_t pos) const \n" ;
 71             return text_[pos] ;
 72         }
 73         /* 1 ==========
 74         char& operator [](std::size_t pos)
 75         {
 76             cout << " char& operator [](std::size_t pos) //1==\n " ;
 77             return text_[pos] ;
 78         } */ //2 ========== non-const 跳轉 const 版本 + 過程轉換 
 79         char& operator [](std::size_t pos)
 80         {
 81             cout << " char& operator [](std::size_t pos) //2==\n" ;
 82             return const_cast<char&>(static_cast<const TextBlock>(*this)[pos] ) ;
 83         }
 84         // 
 85     } ;
 86     void print_0(const TextBlock& ctb)
 87     { cout << " ctb[0]: " << ctb[0<< "\n" ; }//調用const char& operator [](std::size_t pos) const
 88     // ------------關鍵字 mutable mutable mutable ---------
 89     class CTextBlock
 90     {
 91     private:
 92         char* pText ;
 93         mutable size_t textLength ;//可以在 const成員函數(shù)改變該成員變量 
 94         mutable bool   lengthIsValid ;//可以在 const成員函數(shù)改變該成員變量 
 95     public:
 96         size_t length() const ;
 97         // 
 98     } ;
 99     size_t CTextBlock::length() const//可以在 const成員函數(shù)改變該成員變量 textLength ,lengthIsValid
100     {
101         if(!lengthIsValid)
102         {
103             textLength = std::strlen(pText) ;
104             lengthIsValid = true ;
105         }
106         return textLength ;
107     }
108     // 
109     void exampleFunc()
110     {
111         char greeting[] = "Hello" ;
112         char* p = greeting ; // non-const pointer ,non-const data
113         const char* cp = greeting ;// non-const pointer ,const data
114         char* const pc = greeting ;// const pointer ,non-data
115         const char* const cpc = greeting ;// const pointer ,const data
116         func1(p) ; func1(cp) ; func1(pc) ; func1(cpc) ;
117         func2(p) ; func2(cp) ; func2(pc) ; func2(cpc) ;
118         // -------------------------------------------
119         std::vector<int> iVec(5 ,1) ;
120         // 
121         cout << " *iVec.begin(): " << *iVec.begin() << "\n" ;
122         const vector<int>::iterator it = iVec.begin() ;// const vector<T>::iterator == T* const
123         *it = 10 ; // 沒有問題,實際改變it所指物,但違背正常邏輯 
124         //++it ; //錯誤!it 是 const == T* const 、、Error
125 //error: passing `const __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >'
126 //as `this' argument of `__gnu_cxx::__normal_iterator<_Iterator, _Container>& __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator++()
127 //[with _Iterator = int*, _Container = std::vector<int, std::allocator<int> >]' discards qualifiers|
128         cout << " *iVec.begin(): " << *iVec.begin() << "\n" ;
129         vector<int>::const_iterator cit = iVec.begin() ;//vector<T>::const_iterator == const T*
130         //*cit = 1 ;//錯誤! *cit(所指物)是const
131 //error: assignment of read-only location|
132         ++cit ;//沒有問題,改變 cit ,指向下一個所指物 
133         // -------------------------------------------
134         TextBlock tb("Hello") ;
135         cout << " " << tb[0<< "\n" ;
136         const TextBlock ctb("Hello") ;
137         cout << " " << ctb[0<< "\n" ;
138         cout << " print_0(tb) ; \n" ;
139         print_0(tb) ;
140     }
141 }//namespace testItem03
142 // ====================================================================
143 // --- 條款04:確定對象被使用前先被初始化 
144 // 注意:
145 // 1    為內置型對象進行手工的初始化,因為C++ 不保證初始化它們
146 // 2    構造函數(shù)最好使用成員初值列表初始化成員變量( member initializatiob list) ,
147 //      而不要在構造函數(shù)本體內使用賦值操作(assignment)。初始列表列出的成員變量,其排列次序應該跟
148 //      它們在class 中的聲明次序相同。(而class 中的聲明次序應該符合邏輯)
149 // 3    為免除“跨編譯單元之初始化次序”問題,請以local static 對象替換 non-local static 對象。
150 // 4    對于大多數(shù)類型而已,比起先調用default構造函數(shù)日后再調用copy assignment操作符,單只調用
151 //      一次構造函數(shù)是比較高效的,有時甚至高效得多。(而對于內置類型基本一樣,差不多)
152 //      在“初始化次序不確定性”(這對不同編譯但愿所定義的non-local static對象是一種折磨)氛圍下
153 //      加強你的設計,你可以考慮 以上 3 點的策略 non-local static -->> local static轉化 !!!
154 namespace testItem04
155 {
156     class PhoneNumber {} ; // .
157     class ABEntry
158     {
159     private:
160         string name_ ;
161         string address_ ;
162         std::list<PhoneNumber> phones_ ;
163         int     numTimesConculted ;
164     public:
165         ABEntry() ;
166         ABEntry(const string& name ,const string& addr ,\
167                 const list<PhoneNumber> phones )
168         : name_(name) ,address_(addr) ,phones_(phones) ,\
169           numTimesConculted(0//初始化列表初始化 data member
170         {} // 主體為空 記住根據(jù)class定義data member次序初始化 .
171         /*
172         {
173             name_ = name ;  //這些都是賦值--assignments
174             address_ = addr ;//而不是 初始化--initilizations
175             phones_ = phones ;
176             numTimesConculted = 0 ;
177         } */
178     } ;
179     ABEntry::ABEntry():name_() ,address_() ,phones_() ,numTimesConculted(0)
180     {}// 記住根據(jù)class定義data member次序初始化 .
181     // ----------------------------------
182     // -------- one.h ----------// //多編譯單元情況
183     class FileSystem
184     {
185     public:
186         FileSystem() :numDisks_(0) {}//..
187         FileSystem(int numDisks) :numDisks_(numDisks) {}//..
188         // 
189         std::size_t numDisks() const ;//眾多成員函數(shù)之一
190         // 
191     private:
192         int numDisks_ ;// 
193     } ;
194     std::size_t FileSystem::numDisks() const
195     { return numDisks_ ; }// //多編譯單元情況
196     //FileSystem tfs ; //okokok
197     // -------- theOther.h ----------// //多編譯單元情況
198     FileSystem tfs_non_local_static ;//預備給客戶使用對象--
199     //extern FileSystem tfs_non_local_static ;//預備給客戶使用對象--the file system //多文件(編譯單元)
200     // .
201     FileSystem& tfs_local_static() ;//聲明函數(shù) 
202     class Directory
203     {
204     private:
205         string dir_ ;
206     public:
207         explicit Directory(string dir) ;
208         // 
209     } ;
210     size_t handleNumDisks(size_t num) { /*.*/return num ; }// 
211     Directory::Directory(string dir) : dir_(dir)
212     {
213         // 
214         //size_t disks = tfs_non_local_static.numDisks() ;// bad non-local static object
215         size_t disks = tfs_local_static().numDisks() ;//good local static object
216         handleNumDisks(disks) ;
217         // 
218     }
219     // ---------------------------------------------------
220 // 3    為免除“跨編譯單元之初始化次序”問題,請以local static 對象替換 non-local static 對象。
221     FileSystem&tfs_local_static()
222     //這個函數(shù)用來替換tfs對象:它在FileSystem class 中可能是一個static
223     {//定義并初始化一個local static對象,返回一個reference指向上述對象 
224         static FileSystem fs ;
225         return fs ;
226     }
227 }//namespace testItem04
228 // === 二、構造/析構/賦值運算 ============================================
229 // ====================================================================
230 // --- 條款05:了解C++ 默默編寫并調用的哪些函數(shù):
231 //     (默認)構造函數(shù),析構函數(shù),賦值函數(shù),復制構造函數(shù)
232 // 注意:
233 // 1    編譯期可以暗自為class 創(chuàng)建 default 構造函數(shù),copy構造函數(shù),copy assignment
234 //      操作符,以及析構函數(shù) 
235 namespace testItem05
236 {// ..
237 }
238 // ====================================================================


posted on 2010-05-27 17:12 only 閱讀(248) 評論(0)  編輯 收藏 引用 所屬分類: 瑣碎編程

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久久久久久久妞妞| 欧美在线看片| 欧美亚洲成人精品| 欧美色综合网| 国产精品揄拍一区二区| 国产视频综合在线| 在线电影院国产精品| 亚洲电影天堂av| 亚洲伦理网站| 欧美亚洲视频| 欧美91大片| 一区二区三区视频观看| 欧美一区二区高清在线观看| 久久久久久久国产| 欧美日韩不卡在线| 国产一区视频网站| 在线亚洲观看| 美女精品在线| 亚洲免费观看高清完整版在线观看| 亚洲亚洲精品三区日韩精品在线视频| 欧美一区二区三区视频在线| 欧美mv日韩mv国产网站| 国产精品国产成人国产三级| 国产一区二区高清不卡| 亚洲免费影视| 国产精品视频专区| 亚洲精品色图| 在线精品一区二区| 久久伊人精品天天| 亚洲精品视频免费| 亚洲欧美日韩一区二区| 蜜臀av在线播放一区二区三区| 欧美日韩一区二区在线播放| 国内成+人亚洲+欧美+综合在线| 日韩午夜av| 免费久久99精品国产自| 亚洲一区二区三区在线观看视频| 欧美~级网站不卡| 国产日韩精品电影| 韩日在线一区| 韩日视频一区| 一区二区在线不卡| 翔田千里一区二区| 亚洲精品三级| 免费中文日韩| 精品二区视频| 久久精品国产清高在天天线| 亚洲手机在线| 国产精品免费在线| 亚洲欧美日韩电影| 亚洲午夜国产成人av电影男同| 欧美激情在线狂野欧美精品| 一区二区三区无毛| 浪潮色综合久久天堂| 久久激情五月激情| 精品成人在线视频| 久久资源在线| 久久久www成人免费无遮挡大片 | 亚洲精品乱码久久久久久按摩观| 99国产一区二区三精品乱码| 久久野战av| 国产麻豆成人精品| 午夜精品在线视频| 亚洲一区二区精品视频| 欧美视频在线观看免费网址| 9i看片成人免费高清| 亚洲国产毛片完整版| 免费看黄裸体一级大秀欧美| 在线观看国产精品网站| 欧美激情亚洲综合一区| 欧美国产一区视频在线观看| 亚洲六月丁香色婷婷综合久久| 亚洲激情网址| 欧美先锋影音| 久久av一区二区三区漫画| 校园激情久久| 亚洲一区国产精品| 亚洲精品久久在线| 国产精品久久久久久影视| 性做久久久久久| 欧美一区二区三区另类| 伊人久久av导航| 亚洲人成亚洲人成在线观看图片| 亚洲国产日韩欧美在线动漫| 免费成人av资源网| 久久美女性网| 亚洲黄色成人| 亚洲免费av片| 国产精品永久| 欧美不卡一区| 欧美日韩91| 久久国产综合精品| 久久免费视频一区| 99视频+国产日韩欧美| 一区二区免费看| 国产三级精品在线不卡| 欧美+日本+国产+在线a∨观看| 亚洲国产日日夜夜| 亚洲精品在线一区二区| 免费日韩精品中文字幕视频在线| 99精品久久久| 午夜亚洲视频| 99www免费人成精品| 午夜精品久久久久久久久| 亚洲精品国产精品久久清纯直播 | 亚洲高清在线观看| 亚洲视频导航| 亚洲欧洲日本在线| 欧美一区二区三区免费在线看 | 亚洲性图久久| 91久久中文字幕| 欧美在线视频一区| 亚洲欧美在线aaa| 欧美电影免费观看高清| 久久噜噜噜精品国产亚洲综合| 欧美日韩精品一区二区三区四区| 麻豆精品精华液| 国产日韩欧美中文| 亚洲午夜免费福利视频| 亚洲免费观看高清在线观看| 久久久激情视频| 久久精品国产亚洲高清剧情介绍| 欧美裸体一区二区三区| 欧美成人免费一级人片100| 国产亚洲精品综合一区91| 一区二区三区四区在线| 亚洲精品一区二区三区99| 久久最新视频| 美女福利精品视频| 影音先锋久久精品| 久久影院午夜论| 裸体歌舞表演一区二区| 国产一区自拍视频| 久久精品国产亚洲一区二区三区| 香蕉av777xxx色综合一区| 欧美日韩一区二区视频在线观看 | 国产精品卡一卡二卡三| 欧美一区二区精美| 欧美一区二区大片| 国产精品视频免费一区| 亚洲一二区在线| 亚洲欧美成人精品| 国产精品美女一区二区| 亚洲欧美www| 久久五月天婷婷| 在线观看91久久久久久| 美日韩精品免费| 日韩亚洲不卡在线| 香蕉久久a毛片| 国产一区二区三区四区hd| 久久精品免费电影| 欧美激情国产日韩精品一区18| 91久久久久| 欧美揉bbbbb揉bbbbb| 亚洲欧美国产77777| 久久久久久久久岛国免费| 激情视频一区二区三区| 欧美 日韩 国产 一区| 一本久久a久久免费精品不卡| 午夜视频一区在线观看| 国语自产偷拍精品视频偷| 免费精品视频| 亚洲一级二级| 免费视频最近日韩| 一本到12不卡视频在线dvd| 国产精品一区二区久激情瑜伽| 久久精品99国产精品| 亚洲黄色成人久久久| 午夜免费电影一区在线观看 | 亚洲一卡久久| 狠狠色噜噜狠狠狠狠色吗综合| 欧美aⅴ一区二区三区视频| 99re6这里只有精品| 久久久一区二区| 一区二区三区高清在线| 国产一区二区黄色| 欧美日韩免费观看一区| 欧美在线视频在线播放完整版免费观看| 欧美激情偷拍| 久久久久免费视频| 在线综合亚洲| 亚洲国产日韩欧美| 国产亚洲免费的视频看| 欧美日韩在线免费观看| 老色批av在线精品| 欧美一区=区| 一区二区三区久久精品| 欧美激情精品久久久久| 久久精品一区二区| 亚洲欧美成人精品| av成人免费在线观看| 亚洲成人直播| 国产亚洲精品久久久久动| 欧美韩日一区二区三区| 欧美成人伊人久久综合网| 欧美资源在线| 久色成人在线| 中日韩美女免费视频网址在线观看 | 欧美极品在线播放| 久久精品免费|