<em id="yyixf"><object id="yyixf"></object></em>
<th id="yyixf"></th>
  • <dd id="yyixf"><track id="yyixf"></track></dd>
  • <rp id="yyixf"><acronym id="yyixf"></acronym></rp>

  • <th id="yyixf"></th>
  • <tbody id="yyixf"><pre id="yyixf"></pre></tbody>

    <dd id="yyixf"></dd>
          1. <s id="yyixf"></s>
          2. 歡迎訪問巨立鑫電腦培訓官方網站! 網址:http://www.appleforos.com

            在線報名 | 聯系我們

            學校動態 行業資訊

            C++快速入門

            點擊:發布日期:2019-05-17作者:

            C++快速入門

             

             

            從今天開始,我們正式進入C++的學習。本章節的任務就是利用代碼介紹一些C++的基礎知識。

             

            C++是在C的基礎上進行擴充的,C++對C的擴充,表現在兩個方面: 

             

            1.在原來面向過程的基礎上,對C語言的功能做了不少擴充;

             

            2.增加了面向對象的機制。

             

            本章節知識介紹一些C++在C的基礎上擴充的一些東西,C++的兼容性方面的東西我們只是簡單的提及,而不會專門的去開始介紹。

             

             


             第一個函數- Hello World

             

            下面我們通過一個例子,正式開始進入學習C++。這是一個VS2010的集成開發環境,在下一章我會教大家如何使用這個集成開發環境去創建工程,構建程序,還有調試等等…..這是一個我們大家都非常熟悉的一個程序,只有一個main函數,輸出了Hello World:

             

            start1.png

             

            運行結果如下:

             

            start2.png

             

            下面我們來分析一下這個程序的結構,C語言的源文件是以.c結尾的,而C++的源文件是以.cpp結尾的。

             

             

            //Hello World    
            #include<iostream>
            int main(int argc, char *argv[])
            {
              Std::cout<<” Hello World”<<std::endl;
              return 0;
            }

             

             

            第一行

             

            //雙斜杠表示單行注釋,編譯器會跳過該行。多行注釋/* 代碼塊*/,無論多少行,/* */中間的代碼塊都不會被編譯。

             

            第二行

             

            以#號開始的被稱為預處理值,在編譯之前,預處理器會預先處理預處理指令。該行代碼將iostream這個頭文件中的所有內容都提取到這個程序中。iostream是標準輸入輸出流的頭文件,在這個類內部聲明的一個對象cout就是我們最常使用的輸出對象。在C中,我們通常使用iostream.h頭文件,而在C++中,頭文件的.h可以省略。

             

            第三行

             

            main函數是C和C++程序的入口點,它是被執行的第一個函數,這個main函數有一個int的返回值,同時還有兩個參數,這兩個參數名是可以省略的。

             

            第五行

             

            將Hello World輸入到控制臺,通過定義在iostream中的cout實現的。Cout表示輸出流,C++中有一個流的概念,在講到輸入輸出的時候我們會介紹。std表示命名空間,用來處理不同代碼段之間的變量名稱沖突問題。我們多人開發一個軟件的時候,經常會出現某個人定義的變量名與別人的變量名相同的問題,有了命名空間,每個人都有自己的命名空間,這樣兩個變量名即使相同編譯器也會識別出它們是不一樣的。endl也是定義在命名空間的,它表示回車換行,我們還可以通過輸出\n的字符串來換行,效果同endl。

             

            第六行

             

            返回一個int值。

             

             


            變量

             

            在程序運行過程中可以改變值的量稱之為變量。變量的命名方式:以字母和下劃線開始。在C中,我們定義變量的方式一般都是在函數的初始位置進行定義。但是在C++中沒有這個限制,你可以在任何地方進行聲明。

             

            注意:任何變量(對于全局變量,我們可以不進行初始化,這個變量會默認的用零進行初始化,但是這通常不是一個好的習慣。)使用之前你都需要給它一個初始值。

             

            如果你沒有給它賦值,將會怎么樣吶?

             

            int a;
            std::cout<<a;

             

            當你沒有給a一個初始值的時候,存儲a的變量的這一片內存是上次程序運行時遺留在那里的值,沒有人知道那是一個怎樣的值,反正那是一個垃圾值,這樣的變量使用起來是沒有意義的。

             

             


            運算符

             

            1.算術運算符:+  -  *  /

             

            2.邏輯運算符: && 邏輯與 || 邏輯或  ! 邏輯非

             

            3.關系運算符:<  >  <=  >=  !=

             

            C++含有一個特殊的三元運算符?:,它需要三個參數: A?B:C   如果A為真,執行B,否則執行C,如果同if else來表示的話,就是

             

             

            if(A){ 
            B
            }else{
            C}

             

            在很多情況下,它可以代替if else,比如我們可以這樣寫:

             

            start3.png

             

            運行結果如下:這種風格的代碼更加簡潔。

             

            start4.png

             


            數組

             

            因為C與C++的三種循環結構是一樣的,所以我們跳過循環,直接介紹數組。C提供了一種C風格的數組,我們定義一個含有十個int元素的數組:

             

            int b[10]={200,3,3,3}; //數組中前四個元素被初始化,后面未初始化的元素自動初始化為0

             

            C語言的這種數組是類型不安全的,我們在使用的時候經常容易下標越界,造成很多的問題。C++也提供了C++風格一種數組,我們應該這樣來定義:

             

            std::vector<int> C;

             

            這是一個int類型的數組,vector翻譯成中文就是向量,它也是定義在std這個命名空間中的。使用vector我們需要包含它的頭文件,需要加上#include<vector>,vector是定義在標準模板庫STL中的,標準模板庫我們在后面也會介紹。

             

            這個C++風格的數組現在是沒有任何元素的,我們怎么給它添加元素吶?

             

             

            C.push_back(10);
            C.push_back(40);
            C.push_back(33);

             

             

            通過push_back()這個函數我們為它添加了兩個元素,可以通過C風格一樣的下標去訪問它.如:

             

            std::cout<<C[1]

             

            這樣就可以使用它了,C[1]就是一個int變量,它可以被賦值,也可以作為一個值去賦給別的變量。

             

            我們可以通過調用size()這個函數獲取它的長度。

             

            我們可以通過for循環來遍歷這個數組。

             

             

            for(int i=0; i<c.size();i++)
            {        std::cout<<C[i]<<endl;
            }

             

             

            運行結果如下:

             

            start5.png

             

             


            字符串

             

            字符串也有C風格的形式,如:

             

            char str[128]=”Hello world”; //c風格的字符串結尾總是有一個結束標志\0
            char *str=”Hello world”;

             

            在C++中,還添加了另外一種方式,那就是string類型。使用string也需要包含string.h這個頭文件。

             

            std::string  str=”Hello world”;

             

            在c中,我們使用strcat這個函數來連接兩個字符串,而在C++中,我們只需要+=就可以連接。如:

             

            str+=”fgfdgdsggf”;

             

            在string這個類中,不需要再用C中的strcmp來比較兩個函數,直接使用==來比較。如:

             

            Str==”fgfdgdsggf”;

             

            可以說,C++風格的字符串使用起來是比較直觀的,更符合我們對基本變量的使用方式,也建議大家多去使用這種風格。

             

            我們之所以這么早就給大家介紹vector和string,也是希望大家在以后的學習中能夠盡早的去使用它們,去替代C風格的數組和字符串,因為它們比較方便,同時是比較安全的。

             

             


            函數

             

            1.函數重載

             

            在使用函數之前,我們應該聲明它。函數的聲明被稱為函數的原型,表示函數的調用約定,包括調用參數的個數和類型,返回值,以及由誰去堆棧等等….

             

            關于函數,我們首先介紹一下函數重載。函數重載時C++引入的一個新的特性。多個函數具有相同的函數名,這些函數中只是參數個數和類型不同,它們就構成了重載。

             

            我們來定義一個函數,返回兩個數之間的最大值。

             

            int max(int a, int b);
            double max(double a, double b);

             

            如果我們通過max(20,40);來調用的話,它會根據參數的個數和類型來調用第一個函數。我們也可以看通過max(20.1,40.0);來調用第二個函數。

             

            2.內聯函數

             

            函數調用,尤其是頻繁的函數調用是有一定代價的,因為它伴隨著參數的傳遞,代碼的入棧,堆棧平衡等等….為了避免這種代價,我們可以將函數聲明為內聯函數。在聲明為內聯函數之后,編譯器會將調用內聯函數的地方展開,將內聯函數的代碼嵌入到調用內聯函數的地方。

             

            內聯函數的使用方法,在函數聲明的前面加上inline。如:

             

            inline void func(){
            int i=0;  i++;
            }

             

             

            如果我們在下面這樣調用它:

             

            func();

             

             

            譯器就會將代碼嵌入到這個地方,成了這樣的形式,這樣就沒有了函數的調用。

             

            int i=0;  i++;

             

             

            注意:使用內聯函數可以節省運行時間,但是它有一個缺點,它會使你的應用程序體積增大。一般只是將代碼段比較短(三到五行),調用比較頻繁的函數聲明為內聯函數。即使你將一些復雜的函數聲明為內聯函數,具體是否嵌入代碼這個是由編譯器來決定的。編譯器會根據一定的辦法來判斷它。

             

            3.函數調用

             

            C++的內存分為兩部分,堆和棧。關于局部變量,函數參數的都是從棧中分配的。棧的特性是先入后出。大家學習過C,對函數的調用原理也比較清楚,函數的調用是通過棧來實現的。

             

            下面我們來回顧一下棧:

             

            比如a調用了B函數,首先a會講B函數需要的參數入棧,接著會壓入A中的返回地址,然后在棧中分配局部變量給函數使用。在函數執行完畢之后,在棧中會彈出函數返回地址到a中,此時分配給B函數的??臻g被回收。局部變量,函數參數占用的??臻g被釋放。

             

            下面我們來回顧一下堆:

             

            內存是有操作系統管理的,應用程序可以向操作系統申請。但是應用程序向操作系統申請的代價是很大的,需要考慮到多線程的一些東西。這個時候就引入了堆。我們可以把堆比喻成向操作系統批發內存的零售商,它一次性從操作系統批發了一大片的內存,然后零售給我們的應用程序使用。因為沒有多次從操作系統申請,所以操作代價比較小。堆一般隨著應用程序的啟動而分配,隨著應用程序的退出而銷毀。所以堆在整個運行期間都是可以使用的。

             

            在C中,我們通過malloc來分配空間,用free來釋放空間。

             

            下面來舉一個例子。

             

             

            int *p=(int *)malloc(sizeof(int)*100); //申請一片可以存儲一百個int變量的值的內存
            if(!p){  //判斷空間分配是否成功,分配失敗就退出
            return 0;
            }
            free (p); //釋放內存
            p=NULL; //當釋放完這一片內存之后,p就已經不應該再指向這一片內存了。

             

            為了防止誤用,我們就把p指向NULL。如果不指向NULL,p就被稱為野指針,野指針會導致一些問題。

             

            在C++中,我們使用new來分配空間,用delete來釋放空間。

             

             

            int *p=new int[100]; //new會自動計算需要的長度,分配一連片的內存
            if(!p){  //判斷空間分配是否成功,分配失敗就退出
            return 0;
            }
            delete []p;  //上面是數組的分配空間,所以釋放的時候需要在變量名前加[]  
            p=NULL;

             

             

            如果只是普通的變量申請和釋放,只需要如此:

             

            int *p=new int;

             

            delete p; //不需要[],對應的申請內存的方式一定要匹配。

             

            注意:使用new申請的內存在必須使用delete才可以釋放,而釋放的形式也必須匹配。

             

             


            引用

             

            引用是C++對C的重要擴充,它的作用是為變量起一個別名。假如一個變量A,我們想給它起一個別名B,我們可以這樣定義:

             

             

            int A=5;
            int &B=A;

             

            現在兩個變量名A和B都是指內存中存儲數值5的那一塊內存,無論對A或者是B進行更改,都會導致這一塊內存的值的改變。

             

            注意:引用必須在定義的時候就初始化,一旦初始化之后就不可以更改。

             

            比如int &B;這樣只是聲明沒有初始化就是不可以的。一旦確定它是哪一個變量的別名,它就不可以被再次改變為別的變量的別名了。

             

            引用使用的一個場景就是在參數傳遞下,默認情況下,函數參數傳遞是按照傳值方式進行的,我們更改形參并不會對實參造成影響。在傳入引用參數的時候,形參是實參的別名,更改形參會改變實參的值。關于函數傳值,我們后面會介紹,這里只是簡單的提及。

             


            標準模板庫(STL)

             

            STL是Standard Template Library的縮寫,這個庫包含了很多的類,這些類都是經過充分測試,并且都是十分高效的。使用它們我們不需要再去測試,因為標準模板庫是由一批非常牛的程序員專家來實現的,高效并且穩定。有數據表明,它比百分之九十九的程序員寫的代碼都要高效。STL提供的功能有很多,我們后面都會講到一些。希望大家都能夠熟悉對STL的使用,前面的string,vector和cout都是在STL中實現的。

             

            在線留言

            *將嚴格保護您的信息請放心填寫

            熱門案例

            更多 +

            幫助中心

            在線報名 聯系我們

            咨詢電話(9:00-17:00)

            0551-65571116
            13225607766

            在線客服

            點擊咨詢

            掃一掃咨詢

            移動端查看

            在線咨詢
            手機請直接輸入:如1860086xxxx
            座機前加區號:如0105992xxxx
            輸入您的電話號碼,點擊通話,稍后您將接到我們的電話,該通話對您完全免費,請放心接聽!
            掃描二維碼
            日本熟妇美熟bbw_德国女兵性肉体开放_波多野结衣办公室双飞_香蕉午夜福利院