1. 程式人生 > 其它 >C++ 學習筆記(一)

C++ 學習筆記(一)

C++ 學習筆記(一)

C++ 語言中 struct 與 C 語言中 struct 的區別

  • 在 C++ 語言中,可直接使用結構體名來宣告變數;在 C 語言中,不能直接使用結構體名來宣告變數,需字首 struct。
  • **C++ 語言的 struct 中既可以定義成員變數又可以定義成員函式;C 語言的 struct 中只能定義成員變數,不能定義成員函式。**例如:
struct shiyanlou
{
    int a;
    int pri() {return a;}
}s1;

在 C++ 的編譯過程中,此結構體不會出錯。但若在 C 語言中,由於 int pri() {return a;} 為成員函式,會出現編譯報錯。

常量宣告

常量宣告一般有兩種方式,一是使用 #define 預處理、二是使用 const 關鍵字。

  • 使用 #define 預處理

格式:#define name value

#define PI 3.14159
#define NEWLINE '\n'
  • 使用 const 關鍵字

格式:const type name = value

const double pi = 3.14;
const char tab = '\t';
  • 在 C++ 中逗號也是一個運算子,稱為 逗號運算子,其形式為:表示式1,表示式2。定義了從左到右的求解順序,例如 a = 1,a + 1 其值為 2。
  • C++ 中最簡單的賦值運算子是 ‘=’。例如 a = (x=4) / (y=2)
    表達的則是 x 賦值為 4,y 賦值為 2,a 賦值為 4 / 2,即 2。除了 =,C++ 中還有一些其他比較常用的賦值運算子:

記憶體分配的三種方式

不同的記憶體分配方式,有不同的記憶體排程機制。C++ 語言的三種記憶體分配方式分別是:靜態儲存區分配、棧記憶體分配和堆記憶體分配。

  • 靜態儲存區分配

靜態分配方式下的記憶體在程式編譯的時候就已經分配好了且存在於程式的整個執行過程。例如 static 變數,其生命週期隨程式的結束而結束,而非像一般變數隨函式或作用域的結束而結束。

除了 static 變數,還有一種全域性物件 static object,也可以存放在靜態儲存區。

  • 棧記憶體分配

棧記憶體分配方式下的記憶體是存在於某作用域的一塊空間。例如呼叫某個函式時,函式內區域性變數的儲存單元可以在棧上建立,函式執行結束時,這些記憶體單元會被自動釋放。

函式內區域性變數的生命週期:起於變數宣告,止於函式執行結束。

  • 堆記憶體分配

堆記憶體分配,也稱 動態記憶體分配,通常使用 new 和 delete 關鍵字進行管理。堆記憶體空間可由使用者手動分配和釋放,所以其生存週期由使用者指定,較為靈活。但頻繁的分配、釋放大小不同的堆空間會產生記憶體碎片。

函式擴充套件

預設引數

在 C++ 中,函式可定義具有預設值的引數,即 預設引數。當呼叫函式時,如果使用者指定了引數值,則使用使用者指定的值;如果引數值預設,則使用預設引數。例如新建 defaultcs.cpp,輸入:

#include<iostream>
using namespace std;

int add(int a,int b = 5){//變數 b 的值預設為 5。
    return a + b;
}

int main()
{
    int a,b;
    cout<<"input a b:"<<endl;
    cin>>a>>b;
    cout<<"a + b(default) = "<<add(a)<<endl; //此時呼叫的 add 函式將 b 的值預設,使之為預設引數。
    cout<<"a + b = "<<add(a,b)<<endl;
    return 0;
}

add(a) 的返回結果為:輸入的 a 值與預設 b 值之和。

add(a,b) 的返回結果為:輸入的 a 值與輸入的 b 值之和。

程式結果:

圖片描述

函式過載

函式過載 指定義一個引數型別或引數個數不同的重名函式。當程式執行時,編譯器將呼叫引數型別與函式形參型別一致的函式。例如新建 renamehs.cpp,輸入:

#include<iostream>
using namespace std;

int add(int a,int b){ //定義整型函式 add。
    int c;
    c = a - b;
    return c;
}

double add(double a,double b){ //定義雙精度型函式 add。
    double c;
    c = a + b;
    return c;
}

int main()
{//函式過載。
    cout<<"a + b = "<<add(3,4)<<endl;//呼叫整型函式 add。
    cout<<"a + b = "<<add(3.111,4.222)<<endl;//呼叫雙精度型函式 add。
}

執行 add(3,4) 時,呼叫 int add(int a,int b) 函式。

執行 add(3.111,4.222) 時,呼叫 double add(double a,double b) 函式。

程式結果:

圖片描述