1. 程式人生 > >C++高階篇(2)——運算子過載及流類庫

C++高階篇(2)——運算子過載及流類庫

引言:

               C++倆大難點,一個是指標,一個就是運算子過載及流類庫,你瞭解嗎?

概述:

              運算子過載就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。流類庫,就是C++資料傳輸和控制流的類的集合倉庫。

內容:

               一 運算子過載

             1 運算子過載的實質:

                           C++中任何運算都離不開函式,所以運算子過載的實質就是函式過載,要過載某個運算子,只需過載相對應的函式即可,與平常的函式過載稍微不同的就是關鍵字不同。需要使用關鍵“operator”和要過載的運算子連用,構成一個運算子函式名。

             2  運算子過載要求:

                 C++中運算子大部分都可以過載,不能過載的只有.、::、*和:。前面三個是因為在C++中有特定的含義,不能過載,以免發生衝突。“:”則是因為不值得過載。另外,“sizeof”和“#”不是運算子,所以不能過載,並且=、()、[]、->這四個運算子只能用類運算子來過載。

                 運算子經過過載後,並不改變原有的優先順序,也不改變它所需的運算元目。

             3 類運算子和友元運算子的區別

                 如果運算子所需的運算元(尤其是第一個運算元)希望進行隱式型別轉換,則運算子應通過友元來過載;另一方面,如果一個運算子的操作需要修改類物件的狀態,則應當使用類運算子。但引數是引用還是物件,要根據運算子在使用中可能出現的情況來決定。

                 若物件作為過載運算子函式的引數,則可以使用建構函式將常量轉換成該型別的物件;若使用引用作為引數,因為這些常量不能作為物件使用,所以編譯系統會報錯。

         二 流類庫:

              1 組成:C++流類庫由幾個進行I/O操作的基礎類和幾個支援特定種類的源和目標的I/O操作的類組成。

                 (1)基礎類:ios類是istream類和ostream類的虛基類,用來提供對六進行格式化I/O操作和錯誤處理的成員函式。通過關鍵字virtual可將公共積累說明為虛基類。

                           從ios類公有派生的istream和ostream倆個類分別提供對流進行提取操作和插入操作的成員函式,而iostream類通過組合istream和ostream倆個類來支援對一個流進行雙向(輸入輸出)操作,並沒有提供新的成員函式。

                 (2)四大流物件:cin、cout、cerr、clog。cin可視為istream的一個物件,同理cout可以視為ostream類的一個物件。進行實際I/O操作時,必須將流和一種具體的物理裝置(鍵盤)聯接起來,C++的流類庫預定四大流物件所聯接的具體裝置:cin與標準輸入裝置相聯接;cout與標準輸出裝置相聯接;cerr與標準錯誤輸出裝置相聯接(非緩衝方式);clog與標準錯誤輸出裝置相聯接(緩衝方式)。

               2 ios_base類

                   ios_base類派生ios類,ios類又是istream類和ostream類的虛基類。

               3 檔案流

                   C++中共有輸入檔案流、輸出檔案流和輸入輸出檔案流三種,並已將它們標準化。要開啟一個輸入檔案流,需要定義一個ifstream型別的物件;要開啟一個輸出檔案流,需要定義一個ofstream型別的物件;如果要開啟輸入輸出檔案流,則要定義一個fstream型別的物件。這三種類型都定義在標頭檔案<fstream>裡。

總結:

              運算子過載重要理解其實質,在特定的場景下使用;流類庫基本上都用得到,一般都有輸入輸出語句,所以要重點掌握流類庫。