文章目錄
- 2.3.3 定義對象
- 2.3.5 聲明和定義
- 3.2.2 string 對象的讀寫
- 3.2.3 string對象的操作
- 4.2.3 指標的操作
2011-8-29 09:28 周一 晴
2.3.3 定義對象
1 初始化
兩種初始化的形式:直接初始化和複製初始化。直接初始化將初始化值放在括弧“()”裡來初始化;複製初始化用等號“=”來初始化。
初始化與賦值的區別:
初始化:建立變數並給它賦值;
賦值: 擦除對象的當前值並用新值來代替,這是因為當定義一個對象時它會預設的賦予其一個預設值。
2.3.5 聲明和定義
變數的定義:
為變數分配儲存空間,指定初值。在一個程式中,變數有且僅有一個定義。
聲明:
用於向程式表明變數的類型和名字。定義也是聲明:當定義變數時本身就聲明了它的類型和名字。
關鍵字extern 可以用來聲明變數而不是定義變數。使用extern聲明變數時包括extern關鍵字、變數類型、變數名。extern聲明不分配儲存空間,只是說明變數已經在其它地方定義,變數可以聲明多次,但只能定義一次。
若在使用extern的同時時也給變數賦值,則變為定義,此時要分配儲存空間,之後就不能再使用此變數名再定義了,也不能再初始化了。
2.4 const限定符
1 const 用來定義一個常量,通過const定義的變數只能在本檔案中使用,其它檔案不能引用,若想在其它檔案中使用可以在定義時使用關鍵字 extern。
2.9 編寫自己的標頭檔
1 標頭檔用於聲明而不是用於定義,其中不能有變數或函數的定義。
2 const變數為常量運算式時,應放在標頭檔中;若不是,不應該放在標頭檔中定義。
3 先行編譯時防止多次包含一個標頭檔的方法:
#ifndef SALESITEM_H
#define SALESITEM_H
….
#endif
3.2 標準 string類型3.2.2 string 對象的讀寫
1 string類型的輸入操作符:
n 讀取並忽略開關所有的空白字元(如空隔、分行符號、定位字元)。
n 讀取字元直到再次遇到空白字元,讀取終止。
2 getline讀取整行文本
string line;
getline(cin, line);
它不忽略分行符號,但也不儲存分行符號,遇到分行符號就停止讀取。
3.2.3 string對象的操作
1 為了避免溢出,儲存string對象size最安全的方法是使用標準庫類型string::size_type.
2 當進行string對象和字串字面值混合串連操作時,+操作符的左右運算元必須至少有一個是string類型的。
3.3 標準庫vector類型
1 一些有自訂建構函式但沒有預設建構函式的類,在初始化這種類型的vector對象時,程式員就不能僅提供元素個數,還需要提供元素初始值。
4.1 數組
1、特殊的字元數組
兩種不同賦值方式所佔用的空間不同:
char ca1[ ] = {'c','+','+'};
char ca2[ ] = {'c','+','+','\0'};
char ca3[] = "C++";
cout<<" sizeof( ca1 ) = " << sizeof(ca1)<<endl;
cout<<" sizeof( ca2 ) = " << sizeof(ca2)<<endl;
cout<<" sizeof( ca3 ) = " << sizeof(ca3)<<endl;
輸出結果:
sizeof( ca1 ) = 3
sizeof( ca2 ) = 4
sizeof( ca3 ) = 4
4.2 指標的引入4.2.3 指標的操作
1 當一個指標變數sp1指向一個字串變數s1時,若此時再給此指標sp1賦值,則也會改變字串變數s1。而若此時sp1指向另一指標sp2,只是讓sp1重新指向了一個變數,但並沒改變s1的值。
string s1("some values");
string *sp1 = &s1;
string s2("another");
string *sp2 = &s2;
cout<<" *sp1 = "<<*sp1<<endl;
cout<<" s1 = "<<s1<<endl;
cout<<" &s1 = "<<&s1<<endl;
cout<<" sp1 = "<<sp1<<endl;
cout<<" *sp2 = "<<*sp2<<endl;
cout<<" &s2 = "<<&s2<<endl;
cout<<" sp2 = "<<sp2<<endl;
*sp1 = " a new value ";
cout<<"======================"<<endl;
cout<<" *sp1 = "<<*sp1<<endl;
cout<<" s1 = "<<s1<<endl;
cout<<" &s1 = "<<&s1<<endl;
cout<<" sp1 = "<<sp1<<endl;
cout<<" *sp2 = "<<*sp2<<endl;
cout<<" &s2 = "<<&s2<<endl;
cout<<" sp2 = "<<sp2<<endl;
sp1 = sp2;
cout<<"======================"<<endl;
cout<<" *sp1 = "<<*sp1<<endl;
cout<<" s1 = "<<s1<<endl;
cout<<" &s1 = "<<&s1<<endl;
cout<<" sp1 = "<<sp1<<endl;
cout<<" *sp2 = "<<*sp2<<endl;
cout<<" &s2 = "<<&s2<<endl;
cout<<" sp2 = "<<sp2<<endl;
輸出結果:
*sp1 = some values
s1 = some values
&s1 = 0012FF34
sp1 = 0012FF34
*sp2 = another
&s2 = 0012FF00
sp2 = 0012FF00
======================
*sp1 = a new value
s1 = a new value
&s1 = 0012FF34
sp1 = 0012FF34
*sp2 = another
&s2 = 0012FF00
sp2 = 0012FF00
======================
*sp1 = another
s1 = a new value
&s1 = 0012FF34
sp1 = 0012FF00
*sp2 = another
&s2 = 0012FF00
sp2 = 0012FF00