(啟動代碼是由編譯器添加都程序中的是程序和操作系統(tǒng)之間的橋梁如果未定義main()函數(shù)程序?qū)⒉煌暾?/span>)通過重載,,同一個運算符可以擁有不同的含義,。編譯器通過上下文來確定運算符的含義,。 前言https://www.toutiao.com/article/7154363803013497359/?log_from=6880bcd60f8c3_1665760065259 (雙斜杠打頭注釋一行注釋可以單獨一行也可以和代碼同行在符號/*和*/之間是注釋可以跨行) 個人覺得學(xué)習(xí)編程最有效的方法是閱讀專業(yè)的書籍,,通過閱讀專業(yè)書籍可以構(gòu)建更加系統(tǒng)化的知識體系,。 一直以來都很想深入學(xué)習(xí)一下C++,將其作為自己的主力開發(fā)語言?,F(xiàn)在為了完成自己這一直以來的心愿,,準(zhǔn)備認真學(xué)習(xí)《C++ Primer Plus》。 為了提高學(xué)習(xí)效率,,在學(xué)習(xí)的過程中將通過發(fā)布學(xué)習(xí)筆記的方式,,持續(xù)記錄自己學(xué)習(xí)C++的過程。 本篇前言學(xué)習(xí)計算機語言,,應(yīng)從程序的基本結(jié)構(gòu)開始學(xué)起,。這就猶如建房屋,首先需要打地基,、搭框架,。 一,、進入C++首先使用C++工具cout生成字符輸出,寫一個顯示消息的簡單C++程序,。通過//可以對代碼提供注釋,,編譯器會忽略它們。 C++對大小寫敏感,。 程序清單2.1 myfirst.cpp //myfirst.cpp -- 顯示消息 #include <iostream> //預(yù)處理器指令 int main() //函數(shù)頭 { //函數(shù)體開始 using namespace std; //使定義可見 cout<<"一起來學(xué)習(xí)C++吧,。"; //消息 cout<<endl; //開始新的一行 cout<<"我想你不會拒絕的!"<<endl; //更多的輸出 return 0; //終止main() } //函數(shù)體結(jié)束 通過之前《CMake學(xué)習(xí)筆記(一)》文章,,可以得到以上代碼的運行結(jié)果: 一起來學(xué)習(xí)C++吧,。 我想你不會拒絕的! 1,、mai()函數(shù)將程序清單2.1進行簡化,,就得到如下代碼結(jié)構(gòu): 在C++中,每條完整的指令都稱為語句,,所有語句都以分號結(jié)束,。 main()中最后一條語句叫作返回語句(return statement),它的作用是結(jié)束當(dāng)前函數(shù),。編譯器到達mian()函數(shù)末尾沒有遇到返回語句,,則默認返回語句為return 0;(默認返回語句僅適用mian()函數(shù))。 通常情況下在運行C++程序時,,main()函數(shù)將被啟動代碼調(diào)用,,而啟動代碼是由編譯器添加都程序中的,是程序和操作系統(tǒng)之間的橋梁,。如果未定義main()函數(shù),,程序?qū)⒉煌暾?/p> 2、C++注釋C++有兩種注釋:
注釋不僅有助于他人理解這些代碼,,更有助于開發(fā)者自己理解(有開發(fā)經(jīng)驗的小伙伴對這一點一定有很深刻的認識),。 3、C++預(yù)處理器和iostream文件程序清單2.1 使用了#include編譯指令: #include <iostream> //預(yù)處理器指令 該編譯器指令導(dǎo)致預(yù)處理器將iostream文件的內(nèi)容添加到程序中,。這是一種典型的預(yù)處理器操作:在源代碼被編譯之前,,替換或添加文本。 4,、頭文件名頭文件(被包含在文件起始處)也稱包含文件,,因為它們被包含在其他文件中。C++編譯器自帶很多頭文件,,每個頭文件都提供了一組特定的工具,。 頭文件命名約定:
5,、名稱空間名稱空間支持是一項C++特性,旨在讓編寫大型程序以及將多個廠商現(xiàn)有的代碼組合起來的程序時更容易,,同時它也有助于組織程序,。 為了解決名稱空間引入后的代碼轉(zhuǎn)換問題,using編譯指令應(yīng)運而生,。 通過以下代碼可以將iostream中的std命名空間中的所有名稱引入當(dāng)前程序代碼文件中: using namespace std; 如果不引入名稱空間,,則需要將名稱空間用兩個:與工具名相連,來使用工具: std::cout<<"Hello World."<<std::endl; 6,、使用cout進行C++輸出程序清單2.1 中使用了cout進行C++輸出: cout<<"一起來學(xué)習(xí)C++吧,。"; //消息 cout的對象屬性包括一個插入運算符(<<),它可以將其右側(cè)的信息插入到流中,。 運算符重載:插入運算符(<<)與按位左移運算符(<<)看上一去一樣,,這就是運算符重載。通過重載,,同一個運算符可以擁有不同的含義,。編譯器通過上下文來確定運算符的含義。 (1)控制符endlendl是一個特殊的C++符號,,表示一個重要的概念:重起一行,。諸如endl等對于cout來說有特殊含義的特殊符號被稱為控制符(manipulator)。 和cout一樣,,endl也在頭文件iostream中定義的,,切同位于名稱空間std中。 (2)換行符以下兩行代碼都有換行的作用: cout<<"\n"; cout<<endl; 但endl可以確保程序繼續(xù)運行前刷新輸出,,而\n不能提供這樣的保證,。 換行符是一種被稱為“轉(zhuǎn)義序列”的按鍵組合。 7,、C++源代碼的格式化在C++中,,分號標(biāo)示了語句的結(jié)尾,不能把空格,、制表符或回車放在元素(比如名稱)中間,。 二,、C++語句C++程序是一組函數(shù),而每個函數(shù)又是一組語句,。程序清單2.2提供了兩種新的語句,,分別是聲明語句創(chuàng)建變量,賦值語句給變量提供值,。 程序清單2.2 carrots.cpp // carrots.cpp -- 食品加工項目 //使用并顯示一個變量 #include <iostream> int main() { using namespace std; int carrots; //聲明一個整型變量 carrots = 25; //給變量賦值 cout << "我有"; cout << carrots;//顯示變量的值 cout << "個胡蘿卜,。"; cout << endl; carrots = carrots - 1;//修改變量的值 cout << "現(xiàn)在我有" << carrots << "個胡蘿卜。" << endl; return 0; } 1,、聲明語句和變量在程序清單2.2中包含了這樣一條聲明語句: int carrots; 這條語句提供了兩項信息:需要的內(nèi)存以及該內(nèi)存單元的名稱,。具體地說,這條語句指出程序需要足夠的空間來存儲一個整數(shù),,在C++中用int表示整數(shù),。編譯器負責(zé)分配和標(biāo)記內(nèi)存的細節(jié)。 該聲明語句指出,,此后程序?qū)⑹褂妹Qcarrots來標(biāo)識存儲在該內(nèi)存單元中的值,。carrots被稱為變量,因為它的值可以修改,。在C++中,,所有變量都必須在首次使用前聲明它。 在C++中,,所有變量都必須聲明,。 2、賦值語句在程序清單2.2中包含了下面這條賦值語句,,表示將整數(shù)25賦值給變量carrots表示的內(nèi)存單元: carrot = 25; 符號=叫作賦值運算符,。 3、cout的新花樣程序清單2.2中使用cout來打印變量,,該變量是一個整數(shù): cout << carrots; cout使用C++面向?qū)ο蟮奶匦?,實現(xiàn)能夠自動識別類型。 三,、其他C++語句程序清單2.3在程序清單2.2的基礎(chǔ)上進行了擴展,,使用cin在程序運行時輸入一個值: // getinfo -- 輸入和輸出 #include <iostream> int main() { using namespace std; int carrots; cout << "你有幾個胡蘿卜?" << endl; cin >> carrots; // C++輸入 cout << "這兒還有兩個,。"; carrots = carrots + 2; //在下一行連接輸出 cout << "現(xiàn)在你有" << carrots << "個胡蘿卜,。" << endl; return 0; } 該程序的運行結(jié)果: 你有幾個胡蘿卜? 100 這兒還有兩個?,F(xiàn)在你有102個胡蘿卜,。 該程序包含兩項特性:用cin來讀取鍵盤輸入以及通過cout進行輸出拼接。 (1)使用cin通過使用cin可以將鍵盤輸入的值賦值給變量。 同cout一樣,,cin也是一個智能對象,。可以將鍵盤輸入的一系列字符轉(zhuǎn)換為接收變量能夠接受的形式,。 (2)使用cout進行拼接iostream文件定義了<<運算符,,以便可以像下面這樣拼接輸出: cout << "現(xiàn)在你有" << carrots << "個胡蘿卜。" << endl; (3)類簡介類是用戶定義的一種數(shù)據(jù)類型,。要定義類,需要描述它能夠表示什么信息和可對數(shù)據(jù)執(zhí)行那些操作,。類之于對象就像類型之于變量,。也就是說,類定義描述的是數(shù)據(jù)格式及其用法,,而對象則是根據(jù)數(shù)據(jù)格式規(guī)范創(chuàng)建的實體,。換句話說,如果說類就好比所有著名演員,,則對象就好比某個著名的演員,。 cout是ostream類對象。 四,、函數(shù)C++函數(shù)分兩種:有返回值和沒有返回值的,。 1、使用有返回值的函數(shù)有返回值的函數(shù)生成一個值,,而這個值可賦給變量或在其他表達式中使用,。 在標(biāo)準(zhǔn)C/C++庫中有一個名為sqrt()的函數(shù),它返回平方根,。 x = sqrt(9); // 返回值3并賦值給x 以上語句中的表達式sqrt(9)將調(diào)用sqrt()函數(shù),,表達式sqrt(9)被稱為函數(shù)調(diào)用,被調(diào)用的函數(shù)叫作被調(diào)用函數(shù)(called function),,包含函數(shù)調(diào)用的函數(shù)叫作調(diào)用函數(shù)(calling function),。 我們將以上語句稍微拓展完善一下: //引入了一個新的cmath頭文件和double類型,這些都先忽略 #include <cmath> // 或者 math.h int main() { double x = sqrt(9); // 返回值3并賦值給x } 以上程序中main()就是調(diào)用函數(shù),,sqrt()就是被調(diào)用函數(shù),。圓括號中的值9就是函數(shù)sqrt()的參數(shù),函數(shù)sqrt()的返回值就是賦值給變量x的值,。 在使用函數(shù)之前,,C++編譯器必須知道函數(shù)的參數(shù)類型和返回值類型。C++提供這種信息的方式就是使用函數(shù)原型語句(通常做法是把原型放置到main()函數(shù)定義的前面),。函數(shù)原型之于函數(shù)就像比變量聲明之于變量——指出涉及的類型,。sqrt()函數(shù)原型就像這樣: double sqrt (double x); 在程序中使用sqrt()函數(shù)時,有兩種方法提供原型:
函數(shù)原型和函數(shù)定義的區(qū)別: 原型只描述函數(shù)接口(發(fā)送給函數(shù)的信息和返回的信息),而定義包含了函數(shù)的代碼,。C和C++將庫函數(shù)的這兩項特性分開了,,庫文件包含函數(shù)的編譯代碼,頭文件則包含原型,。 C++庫函數(shù)存儲在庫文件中,。編譯器編譯程序時,它必須在庫文件搜索到使用的函數(shù),。至于搜索哪些庫文件,,將因編譯器而異。 2,、函數(shù)變體
3,、用戶定義的函數(shù)通過以下代碼,可以實現(xiàn)通過函數(shù)名來調(diào)用用戶定義的函數(shù): 程序清單2.5 ourfunc.cpp //ourfunc.cpp -- 定義自己的函數(shù) #include <iostream> void simon(int); // simon()函數(shù)原型 int main() { using namespace std; simon(10); //調(diào)用simon()函數(shù) cout << "選擇一個整數(shù):"; int count; cin >> count; simon(count); //再次調(diào)用 cout << "完成,!" << endl; return 0; } void simon(int n) //定義simon()函數(shù) { using namespace std; cout << "西蒙說他有" << n << "個胡蘿卜" << endl; } //沒有返回值得函數(shù)不需要返回語句 通過main()函數(shù)兩次調(diào)用simon()函數(shù),,一次的參數(shù)為100,另一次的參數(shù)為變量count,。運行情況如下: 西蒙說他有100個胡蘿卜 選擇一個整數(shù)130 西蒙說他有130個胡蘿卜 完成,! (1)函數(shù)格式首先由一個函數(shù)頭,然后是花括號中的函數(shù)體: 類型 函數(shù)名(參數(shù)列表) { 語句 } C++不允許將函數(shù)定義嵌套在另一個函數(shù)定義中,。 (2)函數(shù)頭在程序清單2.2中,,simon()函數(shù)的函數(shù)頭如下: void simon(int n) 開頭的void表示沒有返回值,括號中的int n表明,,使用simon()時,,應(yīng)提供一個int參數(shù)。 關(guān)鍵字是計算機語言中的詞匯,。本章使用了int,、void、return、double等關(guān)鍵字,。由于這些關(guān)鍵字都是C++專用的,,因此不能用作他用。 |
|