cout<<"Come up and C++ me some time.";
雙括號括起的部分是要打印的消息。在C++中,用雙引號括起的一系列字符叫做字符串,因為它是由若干字符組合而成的。<<符號表示該語句將把這個字符串發送給cout;該符號指出了信息流動的路徑。cout是什么呢?它是一個預定義的對象,知道如何顯示字符串、數字和單個字符等(章介紹過,對象是類的特定實例,而類定義了數據的儲存和使用方式)。
馬上就使用對象可能有些困難,因為幾章后才會介紹對象。實際上,這演示了對象的長處之——不用了解對象的內部情況,就可以使用它。只需要知道它的接口,即如何使用它。cout對象有一個簡單的接口,如果steing是一個字符串,則下面的代碼將顯示該字符串:
cout<<string;對于顯示字符串而言,只需知道這些即可。然而,現在來看看C++從概念上如何解釋這個過程。從概念上看,輸出是一個流,即從程序輸出的一些列字符。cout對象表示這種流,其屬性是在iostream文件中定義的。cout的對象屬性包括一個插入運算符(<<),它可以將其右側的信息插入到流中。請看下面的語句(注意結尾的分號):
cout<<"Come up and C++ me some time.";它將字符串“Come up and C++ me some time.”插入到輸出流中。因此,與其說程序顯示了一條消息,不如說它將一個字符串插入到了輸出流中。不知道為什么,后者聽起來更專業一些。
補充內容:初識運算符重載
如果熟悉C后才開始學習C++,則可能注意到了,插入運算符(<<)看上去酒席按位左移運算符(<<),這是一個運算符重載的例子,通過重載,同一個運算符將有不同的含義。編譯器通過上下文來確定運算符的含義。C本身也有一些運算符重載的情況。例如,&符號既表示地址運算符,又表示按位AND運算符;*既表示乘法,又表示對指針解除應用。這里重要的不是這些運算符的具體功能,而是同一個符號可以有多種含義,而編譯器可以根據上下文來確定其含義(這和確定“sound card”中的“sound”與“sound financial basic”中的“sound”的含義是一樣的)。C++擴展了運算符重載的概念,允許為用戶定義的類型(類)重新定義運算符的含義。
1、控制符endl
現在來看看程序2.1.1中第二個輸出流中看起來有些古怪的符號:
cout<<endl;endl是一個特殊的C++符號,表示一個重要的概念:重起一行。在輸出流中插入endl將導致屏幕光標移動到下一行開頭。諸如endl等對于cout來說有特殊含義的特殊符號被稱為控制符。和cout一樣,endl也是在頭文件iostream中定義的,且位于名稱空間std中。
打印字符串時,cout不會自動移動到下一行,因此在程序2.1.1中,條cout語句將光標留在輸出字符串的后面。每條cout語句的輸出從前一個輸出的末尾開始,因此如果省略程序2.1.1中的endl,得到的輸出將如下:
Come up and C++ me some time.You won't regret it;從上述輸出可知,Y緊跟在句點后面。下面來看另一個例子,假設有如下代碼:
cout<<"The Good, the"; cout<<"Bad, "; cout<<"and the Ukulele"; cout<<endl;其輸出將如下:
The Good, theBad,and the Ukulele同樣,每個字符串緊接在前一個字符串的后面。如果要在兩個字符串之間留一個空格,必須將空格包含在字符串中。注意,要嘗試上述輸出示例,必須將代碼放到完整的程序中,該程序包含一個main()函數頭以及起始和結束花括號。
2、換行符
C++還提供了另一種在輸出中指示換行的舊式方法:C語言符號n:
cout<<"What's next?n";n被視為一個字符,名為換行符。
顯示字符串時,在字符串中包含換行符,而不是在末尾加上endl,可減少輸入量:
cout<<"Pluto is a dwarf planet.n"; cout<<"Pluto is a dwarf planet."<<endl;另一方面,如果要生成一個空行,則兩種方法的輸入量相同,但對大多數人而言,輸入endl更為方便:
cout<<"n"; cout<<endl;本系列中顯示用引用括起的字符串時,通常使用換行符n,在其他情況下則使用控制符endl。一個差別是,endl確保程序繼續運行前刷新輸出(將其立即顯示在屏幕上);而使用“n”不能提供這樣的保證,這意味著在有些系統中,有時可能在您輸入信息后才會出現提示。