1. 程式人生 > >C++知識整理 - 類的引入

C++知識整理 - 類的引入

主要內容

1)結構體變數初始化

2)引用結構體變數

3)結構體陣列

4)指向結構體變數的指標

5)連結串列

6)用結構體變數的引用作函式引數(效率最高的傳遞方式)

7)動態分配和撤銷儲存空間


 

C++允許使用者宣告自定義型別(Undefined Type,UDT),包括結構體(structure)型別、共用體(union)型別、列舉(enumeration)型別、(class)型別。

C++的類(class)型別就是在結構體型別基礎上擴充發展起來的。


 

結構體

sturct是宣告結構體型別的關鍵字。大括號內是結構體中全部的成員,由它們組成一個特定結構體。每一個成員也稱為結構體中的一個,所以成員表又稱域表。

結構體相當於一個模型,不佔用儲存空間

本檔案需要用到某個結構體型別時,可以用#include指令將包含結構體宣告的檔案包含到本檔案中。如: #include <file1.cpp>

 

1)結構體變數初始化

 

2)引用結構體變數

1. 賦值

2. 引用變數的成員

“.”為成員運算子,在所有運算子中優先順序最高

變數的成員只能單獨輸入或者輸出,但可以同時賦值。

 

3)結構體陣列

 

4)指向結構體變數的指標

 

5)連結串列

連結串列是一種常見的資料結構。在結構體中,將下一個結點的地址放到前一個結點的成員next(命名習慣)中,這樣可以方便產生一系列的變數(物件)。

例如:

#include <iostream>

using namespace std;

struct Student

{

    int num;

    Student * next;                      /*next符合命名習慣*/

};



int main()

{

    Student a,b,c,* head,* p;            /*head符合命名習慣*/

    a.num = 1001;b.num = 1002;c.num = 1003;

    head =&a;

    a.next = &b;b.next = &c;c.next = NULL;

    p = head;

    do

    {

        cout<<p->num<<endl;

        p = p->next;

    } while(p != NULL);

    return 0;

}

 

6)用結構體變數的引用作函式引數(效率最高的傳遞方式)

#include <iostream>
using namespace std;

struct Student
{
	int num;
};

void print(Student &);

int main()
{
	Student a = {1001}; 
	print(a);
	return 0;
}

void print(Student & stu)
{
	cout<<stu.num<<endl;
}

 

7)動態分配和撤銷儲存空間

C++提供了newdelete運算子來動態分配和撤銷空間,使用方式如下:

//開闢一個存放整數的儲存空間,返回一個指向該空間的地址(指標)

new int;

 

//開闢一個存放整數的空間,並賦初值為100,之後將該空間的地址賦給指標變數

int *p = new int(100);

 

//開闢一個存放長度為10的字元陣列的空間,並將陣列首元素的地址賦給指標變數

char *p = new char[10];

 

//撤銷變數的空間

delete p;

 

//撤銷陣列的空間

delete [ ] p;

 

例子:

int main()

{

    Student * p;

    p = new Student;

    p->num = 1001;

    cout<<p->num<<endl;

    delete p;

    return 0;

}

 

列舉型別

所謂“列舉”是指將變數的值一一列舉出來,變數的值只能在列舉的值域裡面取。

 

宣告列舉型別用enum開頭。例如:

enum weekday {sun,mon,tue,wed,thu,fri,sat};

花括號中的元素稱為列舉元素或列舉常量。

 

聲明瞭列舉型別後就可以用它來定義變數

weekday workday,weekend;

當然,我們也可以在宣告列舉型別的同時定義變數,也可以在定義變數的同時賦初值。

 

需要注意的是,列舉元素作為常量是有值的。編譯系統預設將列舉元素按順序從0開始往後賦值。如執行語句

workday = mon;cout<<workday;

輸出的結果將會是1,而不是字串mon。

 

除此之外,我們還可以把列舉元素賦給整型變數。

先對整型變數(順序號)進行處理,再利用強制型別轉換處理列舉型別變數。

雖然可以在宣告列舉型別時指定列舉元素的值,但是這樣書寫會比較混亂,不建議。

 

列舉值可以按整數比較規則比較大小,且排列在前的列舉元素大於後面的列舉元素。如:

if(workday == mon) { }

 

在上例中,雖然workday的值是一個整數,但我們並不能將一個整數直接賦給workday,需要用到強制型別轉換

workday = weekday(1);

作用是將weekday中順序號為1的列舉元素賦給workday,相當於

workday = mon;


 

用typedef宣告新的型別名

 

1)用typedef宣告一個新的型別名來代替已有的型別名

如:

typedef int INTEGER;

typedef float REAL;

 

2)用typedef對一個結構體型別宣告新名字

如:

typedef struct

{

int num;

} NUMBER;

 

3)用typedef宣告一個新的型別名

1. 宣告ARR為一個包含100個元素的整型陣列,並用ARR定義陣列

typedef int ARR[100];

ARR a,b,c;  //這樣定義會更加方便

 

2. 宣告STRING為字元指標,並用STRING定義指標和指標陣列

typedef char * STRING;

STRING c,s[10];

 

3. 宣告FUCP是函式指標,函式返回值為整型。

typedef (* FUCP)();

FUCP p;