1. 程式人生 > >C++程式設計-基本概念

C++程式設計-基本概念

引用

引用可以被視為變數的別名,其行為與常指標T * const相似,但並不需要 * 運算子,應用在函式中可以使得實參處理程式碼更體面。

引用也可成為函式返回值型別,此時若T & F(...) {... return n}則等價於 T & F(...)=n

行內函數

行內函數用以提高程式執行速度。不以壓棧形式呼叫函式,而是使用將函式體程式碼插入主函式的方式。

函式過載

同一函式名,引數數量或型別不同,即為過載關係,編譯器根據引數自動選擇合適的函式。

函式引數預設值

在函式中可以對從某一個開始的引數設定預設值,呼叫函式時,可以不給出右邊一定量的引數。

C++的動態記憶體分配

以 new T 分配單個變數, 以 new T[i] 分配陣列,均返回指標型別。可用於指標陣列的初始化(見原始碼WeirdInitializeArray.cpp)
以 delete P 回收單個變數 以 delete []P 回收陣列,同一地址不可delete一次以上,必須delete動態記憶體

const 關鍵字

const 關鍵字用於定義常量,並且可以使用型別判斷,這一點上優於#define
常引用:const T & 不可在引用上改變被引用的值,類似於const T * const

類和物件基礎

類是自定義資料結構,具有成員變數和成員函式。類定義出的變數是類的例項,也就是物件。每個物件有自己的成員變數,所佔空間不小於成員變數所佔空間之和。一個類中的所有物件共享成員函式,故這部分空間不算在物件所佔空間內。

練習題源程式:
1、HardSwap.cpp

include<iostream>
using namespace std;

class A
{
    public:
    int x;
    int getX() { return x; }
};

void swap(A & a, A & b)
{
    int tmp = a.x;
    a.x = b.x;
    b.x = tmp;
}

int main()
{
    A a, b;
    a.x = 3;
    b.x = 5;
    swap(a, b);
    cout << a.getX() << "," << b.getX();
    return 0;
}

2、WeirdInitArray.cpp

#include<iostream>

using namespace std;

void swap(int * & a, int * & b)
{
    int * tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int a = 3, b = 5;
    int * pa = &a;
    int * pb = &b;
    swap(pa, pb);
    cout << *pa << "," << *pb;
    return 0;
}

3、WeirdReturnValue.cpp

#include<iostream>

using namespace std;

int main()
{
    int * a[] = {NULL, NULL, new int[1], new int[6], NULL};

    *a[2] = 123;
    a[3][5] = 456;
    if (! a[0]) {
        cout << *a[2] << "," << a[3][5];
    }
    return 0;
}

4、

#include<iostream>

using namespace std;

int & getElement(int * a, int i)
{   
    return a[i];
}

int main()
{
    int a[] = {1, 2, 3};
    getElement(a,1) = 10;
    cout << a[1];
    return 0;
}