1.結構體
1.1什麼是結構體
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明爲變量、指針或數組等,用以實現較複雜的數據結構。結構體同時也是一些元素的集合,這些元素稱爲結構體的成員(member),且這些成員可以爲不同的類型,成員一般用名字訪問。
1.2 結構體的定義與聲明
先聲明數據結構
struct 結構名
{
結構的數據類型
};
接着就是定義結構了
struct 結構名 結構變量名稱
例如下:
struct student
{
int stu_num;
char stu_name[50];
}struct student stu;
2.聯合體
2.1什麼叫聯合體
在進行某些算法的C語言編程的時候,需要使幾種不同類型的變量存放到同一段內存單元中。也就是使用覆蓋技術,幾個變量互相覆蓋。這種幾個不同的變量共同佔用一段內存的結構,在C語言中,被稱作“共用體”類型結構,簡稱共用體,也叫聯合體。
2.2聯合體的定義
定義一個聯合類型的一般形式爲:
union 聯合名
{
成員表
};
成員表中含有若干成員,成員的一般形式爲: 類型說明符 成員名 成員名的命名應符合標識符的規定。
代碼示例:
union perdata
{
int class;
char office;
}
定義了一個名爲perdata的聯合類型,它含有兩個成員,一個爲整型,成員名爲class;另一個爲字符數組,數組名爲office。聯合定義之後,即可進行聯合變量說明,被說明爲perdata類型的變量,可以存放整型量class或存放字符數組office。
3.類
3.1什麼叫類
C++ 中的類(Class)可以看做C語言中結構體(Struct)的升級版。結構體是一種構造類型,可以包含若干成員變量,每個成員變量的類型可以不同;可以通過結構體來定義結構體變量,每個變量擁有相同的性質。
C++ 中的類也是一種構造類型,但是進行了一些擴展,類的成員不但可以是變量,還可以是函數;通過類定義出來的變量也有特定的稱呼,叫做“對象”。
3.2代碼示例
class Date
{
private:
int hour;
int minute;
int day;
public:
void display()
{
count << hour << end1;
count << minute << end1;
count << day << end1;
}
Date(int k, int l, int o)//類中不能初始化變量,故可以用析構函數進行初始化
{
hour = k;
minute = l;
day = o;
}
};
4.類和結構體的區別
- 結構體也可以被認爲是一種特殊的類,它不存在任何函數,構造和析構函數也沒有,而且是一個公共的的類。
- 結構體在默認情況下成員是公共的(public),類在默認情況下成員是私有的(private)。
- C++結構體的繼承默認是public,而c++類的繼承默認是private。
- 類要加上public變成共有的才能被訪問,而結構本身就是共有的可直接訪問。
- C定義結構體變量時需要加struct關鍵字,C++中定義結構體變量時可以不加struct關鍵字。
- 結構體基本用在很多數據,需要一個結構體來封裝這些數據。而類的話,是面向對象的思想,可以有很多接口讓人調用,私有變量等外部不能調用,還有保護類型的變量。
5.聯合和結構體的區別
- 他們都是c語言的一種數據類型.
- 結構體和聯合體可以含有多種數據類型,枚舉只能含有一種基本數據類型,而且爲整型。
- 結構體和聯合體所佔的空間不同,結構體按照對其方式每個數據類型都是獨立的數據空間,整個結構體所佔的空間基本上可以等於或者大於每個獨立數據空間的和。而聯合體所有數據類型都共享最大的那個數據類型的空間,所佔的空間爲最大的那個數據類型所佔的空間。
- 結構和聯合都是由多個不同的數據類型成員組成, 但在任何同一時刻,聯合中只存放了一個被選中的成員, 而結構的所有成員都存在。
- 對於聯合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在.
- 在一定情況下聯合和結構體也可以聯繫起來使用,其目的是爲了節省空間。