How to Write a C++ Program
定義新的class應(yīng)該為他提供自己的output運算符
????????讓class的用戶得以像面對內(nèi)置類型一樣地以同樣方式輸出對象內(nèi)容
??????????????????????????重載?掐松!(目前并沒有看到用什么來解決)
Defining and Initialzing a Data Object
構(gòu)造函數(shù)初始化語法
// TypeName Variable(value);
int num(0);
????????如果對象需要多個初值(例如復(fù)數(shù))踱侣,普通的就沒辦法完成任務(wù),使用構(gòu)造函數(shù)初始化語法就可以完成了大磺。
const
????????被定義為const的對象抡句,在獲得初值之后,無法再有任何變動量没。一旦再給const對象指定新值玉转,就會產(chǎn)生==編譯錯誤==。
條件運算符(三目運算符)
expr
? 如果expr為true殴蹄,執(zhí)行這里
: 如果expr為false究抓,執(zhí)行這里
????????其實他只是一個簡單的if-else
語句
if (expr)
{
// code
}
else (expr)
{
// code
}
運算符的優(yōu)先級
- 邏輯運算符????????NOT
- 算術(shù)運算符????????* / %
- 算術(shù)運算符????????+ -
- 關(guān)系運算符????????< > <= >=
- 關(guān)系運算符????????== !=
- 邏輯運算符????????AND
- 邏輯運算符????????OR
- 賦值運算符
// 這是不可能正確的,永遠為false
! ival % 2
Writing Conditional and Loop Statements
這是一小段程序的偽碼袭灯,覺得他對程序的邏輯挺有幫助的刺下,小記一下
while 用戶想要猜測的某個數(shù)列
{
#1
顯示該數(shù)列
while 用戶所猜的答案并不正確 and 用戶想要再猜一次
{ #2
讀取用戶所猜的答案
遞增 number_of_tries
if 答案正確
{ #3
遞增correct_guess
將got_ittrue的值設(shè)為true
}
else
{
用戶打錯了,在此對他表示遺憾稽荧,并根據(jù)用戶已猜過的總數(shù)橘茉,產(chǎn)生不同的回應(yīng)結(jié)果 // #4
詢問用戶是否愿意再試一次
讀取用戶的意愿
if 用戶相應(yīng) no // #5
將go_for_it 的值設(shè)為false
}
}
}
for循環(huán)中
++i
和i++
區(qū)別淺析
for (size_t i = 0; i < n; ++i)
{
// code
}
????????在以前我常使用的是i++
,并且在很多編譯器中的預(yù)設(shè)代碼也是i++
姨丈,但是在《C++ Primer》中發(fā)現(xiàn)了不一樣的東西畅卓。
i++
要==另外申請一個變量==來保存i + 1
之后的值,因為i
和i + 1
的值都會用到蟋恬,但是++i
就不一樣只存在一個變量翁潘。試想一下我們使用一個類來做運算的時候,效率是不是會特別低歼争。
switch
switch( flag )
{
case 0:
case 1:
// code
break;
// ...
}
????????這樣寫是可以的拜马,相當(dāng)于||
if (flag == 0 || flag == 1)
{
// code
}
????????不過第一次遇到這樣寫,還是記錄一下沐绒,說不定有什么用處
How To Use Arrays and Vectors
使用array來初始化vector
// ArrayName[]
vector<TypeName> VecName (ArrayName, ArrayName + ArrayNameSize);
Pinters Allow for Flexibility
& 取址運算符
????????希望取得對象所在的內(nèi)存地址而非對象的值
* 提領(lǐng)
????????取得位于該指針所指內(nèi)存地址上的對象
防止對null指針進行提領(lǐng)操作
????????預(yù)防程序報錯
if (pi && *pi == 1)
{
// code
}
.
(dot) 和->
(arrow)
-
.
:對象自身調(diào)用操作 -
->
:指向?qū)ο笾羔樥{(diào)用操作
Writing and Reading Files
頭文件
#include <fstream>
輸出模式開啟文件
ofstream OutFile("FileName.txt");
- 如果指定文件不存在俩莽,就會有一個新的文件被產(chǎn)生出來并打開供輸出使用。
- 如果指定文件已經(jīng)存在乔遮,這個文件會被打開用于輸出扮超,而文件中原有的數(shù)據(jù)就會被丟棄。
// 追加模式
ofstream OutFile("FileName.txt", ios_base::app);
// 如果需要邊讀邊寫,以追加模式打開檔案瞒津,文件位置位于末尾蝉衣,必須重新定位。
// 但是寫入操作都會將數(shù)據(jù)添加在文件末尾
ofstream IoFile("FileName.txt", ios_base::in|ios_base::app);
IoFile.seekg(0); // 定位到起始處