C 基礎教程物件導向(學習筆記(101))

2021-09-02 19:39:44 字數 1978 閱讀 4332

輸入和輸出功能未定義為核心c ++語言的一部分,而是通過c ++標準庫提供(因此駐留在std命名空間中)。在前面的課程中,您包含了iostream庫頭,並使用cin和cout物件來執行簡單的i / o. 在本課中,我們將更詳細地介紹iostream庫。

iostream庫

當您包含iostream標頭時,您可以訪問負責提供i / o功能的整個類層次結構(包括乙個實際上名為iostream的類)。非檔案i / o類的類層次結構如下所示:

你可能會注意到這個層次結構的第一件事是它使用了多重繼承(我們告訴你要盡可能避免這種情況)。但是,iostream庫已經過設計和廣泛測試,以避免任何典型的多重繼承問題,因此您可以自由使用它而無需擔心。

您可能會注意到的第二件事是「流」一詞使用得非常多。最基本的是,c ++中的i / o是用流實現的。抽象地說,流只是一系列可以按順序訪問的字元。隨著時間的推移,流可能產生或消耗可能無限量的資料。

通常我們處理兩種不同型別的流。 輸入流用於儲存來自資料生成器的輸入,例如鍵盤,檔案或網路。例如,當程式當前不期望任何輸入時,使用者可以按下鍵盤上的鍵。而不是忽略使用者按鍵,資料被放入輸入流,在那裡它將等待程式準備好它。

相反,輸出流用於儲存特定資料使用者的輸出,例如監視器,檔案或印表機。將資料寫入輸出裝置時,裝置可能尚未準備好接受該資料,例如,當程式將資料寫入其輸出流時,印表機可能仍在預熱。資料將位於輸出流中,直到印表機開始使用它。

某些裝置(如檔案和網路)能夠同時作為輸入和輸出源。

關於流的好處是程式設計師只需要學習如何與流互動,以便向許多不同型別的裝置讀取和寫入資料。有關流如何與其連線的實際裝置進行互動的詳細資訊由環境或作業系統決定。

c ++中的輸入/輸出

儘管ios類通常派生自ios_base,但ios通常是您將直接使用的最基類。ios類定義了一堆輸入和輸出流共有的東西。我們將在未來的課程中處理這些內容。

istream的類是與輸入流處理時所使用的主類。對於輸入流,提取運算子(>>)用於從流中刪除值。這是有道理的:當使用者按下鍵盤上的鍵時,鍵碼被放置在輸入流中。然後,您的程式從流中提取值,以便可以使用它。

ostream的類是與輸出流處理時所使用的主類。對於輸出流,插入運算子(<

該iostream的類可以同時處理輸入和輸出,允許雙向i / o。

最後,有一堆以「_withassign」結尾的類。這些流類派生自istream,ostream和iostream(分別),並定義了賦值運算子,允許您將乙個流分配給另乙個。在大多數情況下,您不會直接處理這些類。

c ++中的標準流

標準流是由它的環境提供給電腦程式的預連線的流。c ++附帶了四個預定義的標準流物件,這些物件已經設定好供您使用。你見過的前三個:

cin - 與標準輸入相關聯的istream_withassign類(通常是鍵盤)

cout - 繫結到標準輸出的ostream_withassign類(通常是監視器)

cerr - 與標準錯誤(通常是監視器)繫結的ostream_withassign類,提供無緩衝輸出

clog - 與標準錯誤(通常是監視器)繫結的ostream_withassign類,提供緩衝輸出

通常立即處理無緩衝輸出,而緩衝輸出通常作為塊儲存和寫出。由於clog不經常使用,因此通常會從標準流列表中省略它。

乙個例子

以下是使用標準流的輸入和輸出示例:

#include #include // exit()

int main()

// 否則我們將在cout上再次使用插入來列印結果

cout << "you entered " << nage << " years old" << endl;

return 0;

}

C 基礎教程物件導向(學習筆記5(2))

在編寫具有多個建構函式的類 大多數建構函式 時,必須為每個建構函式中的所有成員指定預設值會導致冗餘 如果更新成員的預設值,則需要觸控每個建構函式。從c 11開始,可以直接為普通類成員變數 不使用static關鍵字的變數 提供預設初始化值 class rectangle void print int ...

C 基礎教程物件導向(學習筆記(23))

過載一元運算子 與您目前看到的運算子不同,正 負 和邏輯非 運算子都是一元運算子,這意味著它們只能在乙個運算元上執行。因為它們僅對它們所應用的物件進行操作,所以通常將一元運算子過載實現為成員函式。所有三個運算元都以相同的方式實現。讓我們看一下我們如何在前面的例子中使用的cents類上實現operat...

C 基礎教程物件導向(學習筆記(24))

過載比較運算子相對簡單,因為它們遵循我們在過載其他運算子時看到的相同模式。因為比較運算子都是不修改左運算元的二元運算子,所以我們將使過載的比較運算子宣告為友元函式。這是乙個帶有過載運算子 和operator!的car類的示例。include include class car friend bool...