最近在開源中國社區想找一些開源的軟體來學習學習, 發現裡面較多的可執行實體都是採用C++語言編寫的, 同時還發現一些手機類的或者其他類的應用發採用的也是C++,比方說比較有名的QT,裡面使用的語言就是C++;感覺以純C編製的應用程式比較少,同時也想看看C++這個語言與C到底有多大區別,所以就決定開始自學C++。
採用的教材是: C++ Primer 第四版的中文版, 圖靈程式設計叢書(這個頭銜讓我想起那個科學奇人和怪人:圖靈,一個永不磨滅的名字),人民郵電出版社,原本打算用C++ Primer Plus 第五版,可是書店沒有賣的,而剛好在網上推薦的書目裡面也有C++ Primer,於是就花了80大元買了一本。
從今天開始我的C++學習之路, 不知道非電腦專業的人員學習C++,會有什麼後果,或者學習的難度大不大......一切只能待日後慢慢體驗了。
下面開始我的學習記錄。
很奇怪,為什麼這本書的第一個執行個體不是Hello Word!的實現, 難道是為了顛覆Hello Word!在程式界的地位,還是為了彰顯C++與C的不同.
1、C++的主函數
C++程式也是有函數組成的, 而且在C++程式中也有一個入口函數:main(),和C中一樣,程式的執行從mian開始,並且在main中結束。
Exp:
int main()
{
return 0;
}
C++的函數包括4個部分:
函數傳回值類型 函數名 函數參數列表
函數體
這個結構和C語言中的一樣。在上面的函數中:
int 表示main函數在執行完後將返回一個int類型值(int 內建資料內心 Built In type),
mian就是函數的名稱, 在C++程式中有且只有一個main函數。
() 部分就是mian函數是參數列表, 準確的說是形式參數列表
{ } 之間的部分是函數體, 這個函數體包括一個C++的語句:return 0;
當然者只是一個簡單的main函數實現, 大體函數的結構就是這樣, 與C語言的結構基本一致。
2、 關於main函數的傳回值
實際啟動並執行過程中,我們如果這樣定義main函數也沒有問題:
Exp:
main()
{
;
}
這裡定義了一個沒有傳回值和實際執行語句的main函數,這是一個最簡單的程式了。他什麼也不幹,也不能幹,但是他確實是一個完整的程式。
在此推薦使用具有傳回值的main函數, 並且建議傳回值類型是int型。因為在系統啟動並執行完程式後需要一個值來判定程式是否正確執行;通常在
Unix和類型Unix系統下返回0表示程式成功執行, 在Win下也一樣。當返回非零值的時候就表示程式執行過程中有錯誤,這些錯誤由系統定義。
如果定義了傳回值類型, 則函數的傳回值必須和定義的類型一致, 或者需要進行轉換後才能返回否則將出現錯誤。
3、編譯和執行程式
無論如何上面的Example是一個完整的程式,那麼怎麼編譯和執行它呢
我們假設來源程式的檔案名稱為: main.cpp
通常C++的原始碼的副檔名是: cpp 或者cxx等
常用的編譯器有: GNU C++(g++)、 Microsoft的Visual Studio中的VC ++ 以及Unix中的CC。
g++的編譯過程:
$g++ main.c
如果不加編譯選項則在目前的目錄產生一個a.out的可執行檔, 可以通過
$ ./a.out 來執行這個程式
VC++的編譯過程:
>cl -GX main.c
如果編譯成功則會產生一個與原始碼檔案同名的可執行檔: main.exe ;可以通過執行:
>main.exe 來執行這個程式
CC的編譯過程與g++的編譯和執行過程一樣,這裡就不說了。至於編譯器選項不在此處討論,以後有機會在說吧.......哈哈 我很懶
IDE環境的編譯和編輯:
通常用IDE編譯和編輯程式,還需要學習環境的使用方法,因為這裡空間和時間有限,所以就不討論了。
4、 C++中的標準輸入和輸出
在標準C++的庫中定義了幾個標準的輸入輸出資料流: istream、 ostream;這兩個標準輸入輸出由標準iostream庫來處理實現。
istream和ostream類型是標準iostream庫的基礎。
C++同時定義了幾個標準的輸入輸出對象: cin、 cout、cerr和clog。
cin對象映射到標準輸出裝置,通常是顯示器;cout映射到標準輸出裝置,通常是鍵盤; cerr也映射到標準輸出裝置,通常是顯示器;
clog對象用來產生程式執行時的資訊。
一個簡單的IO應用:
Exp:
#include <iostream>
int main()
{
int var1,
var2;
std::out<<"Enter two num:"
std::in>>var1>>var2>>std::endl;
std::out<<"You have input tuo number:"<<var1<<"and"<<var2<<std::endl;
return 0;
}
簡單是解析一下這個程式:
#include <iostream>
為預先處理指令,同C語言中的include指令, 表示包含標頭檔。
int var1,
var2; 與C語言同,定義兩個整型的變數, 在C++中成為對象好像更合適。
std為命名空間(namespace),使用命名空間的可以避免命名的衝突,如果引用了兩個不同的命名空間中同名的對象不會引起程式錯誤。
:: 為範圍操作符, 與C語言中的::具有相同的相似的作用。
<< 操作符: 輸出操作符用來將輸出對象映射到輸出資料流上,這裡就把輸出對象映射到std::cout輸出資料流上。<<操作符是一個二元的操作符,需要
兩個運算元, 左邊為輸出資料流對象,右邊為待輸出對象, 並且<<操作符返回一個與左運算元類型一致的對象。因此這裡我們可以:
std::out<<"You have input tuo number:"<<var1<<"and"<<var2<<std::endl;
>> 操作符: 輸入操作符, 用來從輸入資料流取出對象並將對象格式化後映射到接收對象上,>>也是一個二元操作符; 需要兩個運算元,左邊為輸入資料流
對象,右邊為接收輸入的對象, 並且返回一個與左運算元類型一直的對象。因此我們可以:
std::in>>var1>>var2>>std::endl;
std::endl :輸出資料流操縱符,當把它寫入到輸出資料流後, 將具有換行的效果,同時他會要求重新整理與裝置相關聯的緩衝區。
5、注釋
C++中支援兩種注釋:
單行注釋: 由 // 引起的注釋 ; 單行注釋只能用於C語句的行尾
多行注釋(注釋對): /* 注釋內容 */ ; 多行注釋可以出現在可以出現空格、定位字元的地方。
注釋對不可嵌套, 否則會引起不必要的麻煩。
6、簡單的C++程式控制結構
while、for和if語句。這些語句的作用同C語言,因此不再囉嗦.......
一個值的主意的地方是:
對於while、for和if語句的條件陳述式,可以是具有任何傳回值的表達。
下面均假設:
int var;
例如:
while(std::in>>var1)
又例如:
if(std::in>>var1)
這裡不知道:
while(std::out<<var)如何結束, 因為無論如何std::out 都可以返回一個對象(????........ing)
7 類的簡介
在C++的世界裡,可以簡單的用一句話概括: 一切皆對象。
對象有類類型執行個體化而成,
在C中用:
class關鍵字定義類類型, 而用類類型定義對象, 然後根據類類型執行個體化對象。
Exp:
class classtype
{
}
定義一個類對象:
classtype classobject ; //很簡單與定義變數一樣
類的定義與C中的結構體相似, 但是類中可以定義類成員函數。具體就不說了,等到學到的時候在說吧...............