標籤:模組 產品 解決問題 int 換行 9.png 重載 執行個體 public
有趣的重載:
實驗:
將1左移到cout對象中。
將Test改名為Console,此時我們的本意是想讓這個cout代表當前的命令列:
cout代表命令列的一個執行個體,本意是想將1列印到命令列上。
我們在重載函數中用printf列印:
運行結果如下:
可以看到1被列印出來了。
我們還可以重載輸出字元:
運行結果如下:
改進重載函數:
這樣第24行就實現了連續的傳送。
將分行符號定義成一個常量:
最終完善的程式:
1 #include <stdio.h> 2 3 const char endl = ‘\n‘; 4 5 class Console 6 { 7 public: 8 Console& operator << (int i) 9 {10 printf("%d", i);11 12 return *this;13 }14 Console& operator << (char c)15 {16 printf("%c", c);17 18 return *this;19 }20 Console& operator << (const char* s)21 {22 printf("%s", s);23 24 return *this;25 }26 Console& operator << (double d)27 {28 printf("%f", d);29 30 return *this;31 }32 };33 34 Console cout;35 36 int main()37 {38 cout << 1 << endl;39 cout << "D.T.Software" << endl;40 41 double a = 0.1;42 double b = 0.2;43 44 cout << a + b << endl;45 46 return 0;47 }
運行結果如下:
重載過後我們就可以使用console執行個體來輸出了,而不用每一次都輸入格式化字串了。
C++標準庫:
重複發明輪子並不是一件有創造性的事,站在巨人的肩膀上解決問題會更加高效。
上述的輸出資料流對象已經在C++標準庫中實現了。
C++標準庫有一個子庫,這個子庫涵蓋了C庫的功能。
C++編譯環境的組成:
C語言相容庫和C++標準庫中的C庫子模組功能是重複的,但是它們所包含的標頭檔是不一樣的。
標準庫的常用資料結構:
最右邊一列就是C語言子庫。為了相容C語言編譯器的庫中所提供的功能。
C++標準庫中的C庫相容:
我們在上面程式中使用的 #include <stdio.h>就是C相容庫,而不是C語言庫,C相容庫是由編譯器廠商提供的,不是標準庫的一部分。
例:
這裡包含的標頭檔既不是C++標準庫,也不是C語言庫,它是C++編譯器廠商為了推廣自己的產品而提供出來的C相容庫。
我們將C相容庫換成C++標準庫中的C相容模組:
這時就得開啟std命名空間了。
運行結果如下:
C++標準庫:
前輩們將顯示器和鍵盤實現成了C++中的對象。
C++中的輸入輸出:
1 #include <iostream> 2 #include <cmath> 3 4 using namespace std; 5 6 7 int main() 8 { 9 cout << "Hello world!" << endl;10 11 double a = 0;12 double b = 0;13 14 cout << "Input a: ";15 cin >> a;16 17 cout << "Input b: ";18 cin >> b;19 20 double c = sqrt(a * a + b * b);21 22 cout << "c = " << c << endl;23 24 return 0;25 }
運行結果如下:
小結:
第32課 初探C++標準庫