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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章