回顧:在第0章中我總結(jié)了重要的知識(shí)點(diǎn)有:字符串直接量、表達(dá)式的結(jié)構(gòu),操作數(shù)和操作符的定義,還有表達(dá)式的副作用、和std::cout結(jié)合<<操作符返回std::ostream類型,等知識(shí)點(diǎn)。
代碼如下
1 // ask for person's name, and greet the person
2
3 #include <iostream>
4 #include <string>
5
6 int main() {
7 //ask for the person's name
8 std::cout << "Please enter your first name: ";
9
10 //read the name
11 std::string name;
12 std::cin >> name;
13
14 //write a greeting
15 std::cout << "Hello, " << name << "!" << std::endl;
16 return 0;
17 }
#name就是一個(gè)變量(它的類型是std::string),而變量是一個(gè)有名字的對(duì)象(變量一定是對(duì)象,但對(duì)象不一定為變量,因?yàn)閷?duì)象可以沒(méi)有名字,而且對(duì)象對(duì)應(yīng)系統(tǒng)中的一塊內(nèi)存)。
#line 11:是一個(gè)definition,即是一個(gè)定義,定義了一個(gè)名叫做name的std::string類型的變量。而且出現(xiàn)在一個(gè)函數(shù)提中,所以是一個(gè)local variable,當(dāng)程序執(zhí)行放到},就會(huì)銷毀name變量,并且釋放name占用的內(nèi)存,以讓其他變量使用。
#line 12:>>從標(biāo)準(zhǔn)輸入中讀取一個(gè)字符串,并且保存它在name對(duì)象中。當(dāng)通過(guò)標(biāo)準(zhǔn)庫(kù)讀取一個(gè)字符串時(shí),他會(huì)忽略輸入中的所有空白符,而吧其他字符讀取到name中,直到它遇到其他空白符或者文件結(jié)束標(biāo)志。因此std::cin >> name;的結(jié)果是從標(biāo)準(zhǔn)輸入中讀取一個(gè)單詞。
#輸入輸出庫(kù)會(huì)把它的輸出保存在buffer的內(nèi)部數(shù)據(jù)結(jié)構(gòu)上,通過(guò)緩存可以優(yōu)化輸出操作。(因?yàn)樵S多操作系統(tǒng)在向輸出設(shè)備寫(xiě)入字符時(shí)需要花大量的時(shí)間)
#有三個(gè)事件會(huì)促使系統(tǒng)刷新緩沖區(qū)。
#第一,緩存區(qū)滿了,自動(dòng)刷新。
#第二,標(biāo)準(zhǔn)庫(kù)被要求讀取標(biāo)準(zhǔn)輸入流。(即std::cin是std::istream類型)。如line 12.
#第三,顯示的要求刷新緩沖。(std::endl結(jié)束了輸出行,并且刷新緩沖區(qū))
#
1 //ask for a person's name, and generate a framed greeting
2 #include <iostream>
3 #include <string>
4
5 int main() {
6 std::cout << "Please enter your first name: ";
7 std::string name;
8 std::cin >> name;
9 //build the message that we intend to write
10 const std::string greeting = "Hello, " + name + "!";
11
12 //build the second and fourth lines of the input
13 const std::string spaces(greeting.size(), ' ');
14 const std::string second = "* " + spaces + " *";
15
16 //build the first and fifth lines of the output
17 const std::string first(second.size(), '*');
18
19 //write it all
20 std::cout << std::endl;
21 std::cout << first <<std::endl;
22 std::cout << second << std::endl;
23 std::cout << "* " << greeting << " *" << std::endl;
24 std::cout << second << std::endl;
25 std::cout << first << std::endl;
26
27 return 0;
28 }
#greeting的定義包含三個(gè)新的概念
#第一個(gè):在定義變量時(shí)候,可以給定它的值。
#第二個(gè):用+來(lái)連接字符串,但是這兩個(gè)中必須至少有一個(gè)是string對(duì)象。(+也是左結(jié)合性的)
#(+在這里是連接作用),引出overloaded(重載)概念,這個(gè)操作符被重載了,因?yàn)槠鋵?duì)不同操作數(shù)有不同的含義。
#第三個(gè):const可以作為變量定義的一部分,這么做保證在變量生存期內(nèi),不改變它的值。
#如果一個(gè)變量定義為const,必須在定義時(shí)初始化,否則后面就不能再初始化。
#const std::string spaces(greeting.size(), ' ');來(lái)介紹另三個(gè)概念
#第一個(gè):構(gòu)造函數(shù)
#第二個(gè):成員函數(shù)(member function),其實(shí)可以吧greeting看成對(duì)象,向其發(fā)送size消息獲取其長(zhǎng)度。
#第三個(gè):字符直接量。(用'(單引號(hào)),而字符串直接量則是用“號(hào)).字符直接量的類型是內(nèi)置于語(yǔ)言核心的char類型。