我們從一開始就一直在利用C++的輸入輸出在做著各種練習,輸入輸出是由iostream庫提供的,所以討論此標準庫是有必要的,它與C語言的stdio庫不同,它從一開始就是用多重繼承與虛擬繼承實現(xiàn)的面向?qū)ο蟮膶哟谓Y(jié)構(gòu),作為一個c++的標準庫組件提供給程序員使用。
iostream為內(nèi)置類型類型對象提供了輸入輸出支持,同時也支持文件的輸入輸出,類的設(shè)計者可以通過對iostream庫的擴展,來支持自定義類型的輸入輸出操作。
為什么說要擴展才能提供支持呢?我們來一個示例。
C++ 代碼
#include
#include
using namespace std;
class Test
{
public:
Test(int a=0,int b=0)
{
Test::a=a;
Test::b=b;
}
int a;
int b;
};
int main()
{
Test t(100,50);
printf("%???",t);//不明確的輸出格式
scanf("%???",t);//不明確的輸入格式
cout/同樣不夠明確
cin>>t;//同樣不夠明確
system("pause");
}
由于自定義類的特殊性,在上面的代碼中,無論你使用c風格的輸入輸出,或者是c++的輸入輸出都不是不明確的一個表示,由于c語言沒有運算符重載機制,導致stdio庫的不可擴充性,讓我們無法讓printf()和scanf()支持對自定義類對象的擴充識別,而c++是可以通過運算符重載機制擴充iostream庫的,使系統(tǒng)能能夠識別自定義類型,從而讓輸入輸出明確的知道他們該干什么,格式是什么。
在上例中我們之所以用printf與cout進行對比目的是為了告訴大家,C與C++處理輸入輸出的根本不同,我們從c遠的輸入輸出可以很明顯看出是函數(shù)調(diào)用方式,而c++的則是對象模式,cout和cin是ostream類和istream類的對象。
C++中的iostream庫主要包含下圖所示的幾個頭文件:
我們所熟悉的輸入輸出操作分別是由istream(輸入流)和ostream(輸出流)這兩個類提供的,為了允許雙向的輸入/輸出,由istream和ostream派生出了iostream類。
iostream為內(nèi)置類型類型對象提供了輸入輸出支持,同時也支持文件的輸入輸出,類的設(shè)計者可以通過對iostream庫的擴展,來支持自定義類型的輸入輸出操作。
為什么說要擴展才能提供支持呢?我們來一個示例。
C++ 代碼
#include
#include
using namespace std;
class Test
{
public:
Test(int a=0,int b=0)
{
Test::a=a;
Test::b=b;
}
int a;
int b;
};
int main()
{
Test t(100,50);
printf("%???",t);//不明確的輸出格式
scanf("%???",t);//不明確的輸入格式
cout/同樣不夠明確
cin>>t;//同樣不夠明確
system("pause");
}
由于自定義類的特殊性,在上面的代碼中,無論你使用c風格的輸入輸出,或者是c++的輸入輸出都不是不明確的一個表示,由于c語言沒有運算符重載機制,導致stdio庫的不可擴充性,讓我們無法讓printf()和scanf()支持對自定義類對象的擴充識別,而c++是可以通過運算符重載機制擴充iostream庫的,使系統(tǒng)能能夠識別自定義類型,從而讓輸入輸出明確的知道他們該干什么,格式是什么。
在上例中我們之所以用printf與cout進行對比目的是為了告訴大家,C與C++處理輸入輸出的根本不同,我們從c遠的輸入輸出可以很明顯看出是函數(shù)調(diào)用方式,而c++的則是對象模式,cout和cin是ostream類和istream類的對象。
C++中的iostream庫主要包含下圖所示的幾個頭文件:
我們所熟悉的輸入輸出操作分別是由istream(輸入流)和ostream(輸出流)這兩個類提供的,為了允許雙向的輸入/輸出,由istream和ostream派生出了iostream類。