(一)進入c++(基礎知識簡介)
1.示例
??? 非常簡單,只包含一個名為main( )的函數(shù)。myfirst.cpp 示例包含下述元素。
??? ? 注釋,由前綴//標識,到文件的一行末尾結(jié)束。應該在程序的開頭就以注釋來開頭,標注程序的用途,創(chuàng)建的時間以及歷史版本和作者及聯(lián)系方式等,這是很重要的。程序越復雜,注釋的價值越大。
?? ? 預處理器編譯指令#include等。這里包括#include和#ifndef,#define,#endif等。注意:后面所講的using namespace std可以放在函數(shù)外預處理部分,表示對文件中的所有函數(shù)都有效;也可以放在函數(shù)體內(nèi),只在函數(shù)體內(nèi)有效。(using聲明不可以放在類中,會出錯)。
??? ? 函數(shù)頭:int main( )。main主函數(shù)的函數(shù)頭描述的是main()和操作系統(tǒng)之間的接口。一般較復雜的程序中可以寫作:int main(int argc,char *argv[]){}。
??? ? 編譯指令using namespace std,如上所述,可以放在函數(shù)體內(nèi),表示對此函數(shù)有效。編譯指令有時候也會在main函數(shù)外面,using聲明也是如此,表示對后面所有的函數(shù)都有效,然而我們不推薦這種做法。
??? ? 函數(shù)體,用{和}括起。
??? ?使用C++的cout 工具顯示消息的語句。
??? ? 結(jié)束main( )函數(shù)的return語句。對于main主函數(shù)來說,如果結(jié)尾沒有return 0;語句,程序會認為你隱含了return語句,等同于使用了return 0語句,但這只能用于main()函數(shù)中,其他函數(shù)不可以省略。
2. 函數(shù)相關知識:
a.包含函數(shù)頭和函數(shù)體;
b.符號";"是c++語句的組成部分,不能省略;
c.函數(shù)頭描述了函數(shù)與調(diào)用它的函數(shù)之間的接口。
??? 位于函數(shù)名前面的部分叫做函數(shù)返回類型,它描述的是從函數(shù)返回給調(diào)用它的函數(shù)的信息,返回類型一定要有,如果沒有返回值,則返回類型為void。函數(shù)名后括號中的部分叫做形參列表(argument list) 或參數(shù)列表( parameter list ):它描述的是從調(diào)用函數(shù)傳遞給被調(diào)用的函數(shù)的信息,參數(shù)列表可以沒有,沒有表示不需要參數(shù)。我們一般用實參parameter表示調(diào)用函數(shù)傳遞的值,而用形參表示被調(diào)用函數(shù)用來接收這些值的變量,這是實參和形參的區(qū)別。
d.?。。。?!c++做出的優(yōu)化和讓步:
??? 如果編譯器到達main( )函數(shù)末尾時沒有遇到返回語句, 則認為main( )函數(shù)以如下語句結(jié)尾:return 0 ;這條隱含的返回語句只適用于main( )函數(shù), 而不適用于其他函數(shù)。
3.c++預處理器和iostream文件
??? c++對于開頭的#include包含的頭文件,先將源文件加載到源代碼中,再進行編譯(也就是說包含的頭文件將被復制并取代#include這一行)??梢允褂迷萩語言中.h的頭文件,但一般我們使用沒有后綴的c++標準的頭文件,用尖括號括起來(帶尖括號表示處于名稱空間中)。iostream是輸入輸出流,是標準的c++用法,其中有對象cout和cin。名稱空間支持:對于c++標準的頭文件(也就是用尖括號括起來的文件),要使用using namespace std;來使用其內(nèi)部的函數(shù),這是一種偷懶的做法,以使我們可以不用每次都標注std::cout這樣的名稱空間用法,當加入了這句話之后,表明我們可以使用std名稱空間中定義的名稱,而不必使用前綴。更好的方法是,只使所需的名稱可用,這可以通過使用 using 聲明來實現(xiàn):
using std : : cout ; ???// make cout available
using std : : endl ; ???// make endl available
using std : : cin; ????// make cin available
??? ?注意:using編譯指令和using聲明都可以放在函數(shù)內(nèi)或函數(shù)外,在函數(shù)內(nèi)表明只是在函數(shù)內(nèi)部起作用,在函數(shù)外表明在它后面所有的函數(shù)內(nèi)都起作用。?如果沒有特殊要求的話,要將這些指令放在函數(shù)體內(nèi)部開頭處,而如果不是特別麻煩的話,最好使用名稱空間前綴的用法,比如std::cout<<std::endl;。
4.使用cout進行輸出
??? cout使用格式是cout << “字符串”;來輸出相應的字符。對于換行,可以有兩種方式,一種是使用控制符endl,另一種是在“”內(nèi)部使用轉(zhuǎn)義字符\n,endl除了可以換行,還可以刷新緩沖區(qū),而\n沒有刷新作用。cout和cin都可以看做是一種流(或者管道),cout一端連接屏幕,這是固定的,另一端接我們想要輸出的東西,比如cout <<”hello”;就表示“hello”流入cout中,進而流入屏幕。
??? cin同樣如此,默認的cin一端連接著鍵盤的輸入,另一端是儲存信息的變量。比如cin>>a;就表示鍵盤輸入通過cin流入a變量進行保存。與printf相比,cout能夠識別后面輸出內(nèi)容的類型,以便可以進行相應的調(diào)整。傳統(tǒng)的printf使用格式化輸出,不能自動判斷后面的數(shù)據(jù)的格式,需要我們來指定,比如printf(“this is an %s\n”,”apple”);而cout不需要這樣,它會根據(jù)后面的數(shù)據(jù)的類型自動進行調(diào)整,能夠?qū)崿F(xiàn)這樣功能的原因是因為c++面向?qū)ο蟮奶匦?,在后面將學習函數(shù)重載和運算符重載,能夠實現(xiàn)這種智能性設計。
5.c++源代碼的格式化
??? 標記和空白:源代碼中不可分割的元素叫標記(token),空格、制表符、回車統(tǒng)稱為空白。
??? C++源代碼風格:每條語句占一行;每個函數(shù)都有一個開始花括號和一個結(jié)束花括號,每個花括號各占一行(或者開始花括號與函數(shù)處于同一行上);函數(shù)中的語句都相對于花括號進行縮進;與函數(shù)名稱相關的圓括號周邊沒有空白(為了與一些循環(huán)體等非函數(shù)進行區(qū)分,比如for (i=1;i<4;i++)中間要有空白)。
