C 學習筆記十一 組合類及前向引用宣告的使用

2021-10-14 16:25:35 字數 2922 閱讀 1742

對於類,前面的文章分別簡單講述了什麼是類,以及類的建構函式,類的複製建構函式的作用。前面文章的相關鏈結如下:

類的定義與初始化

複製建構函式與析構函式

那麼下面將介紹組合類,什麼是組合類?組合類有什麼作用呢?通常我們在定義乙個類的物件時,類成員的型別實際上通常為基本資料型別,如 int ,float,double…實際上類成員除了可以是基本的資料型別外,還可以是自定義資料型別,也就是說資料型別也可以是類的物件,那麼如果定義乙個組合類,那麼類的構造順序就很重要。利用前面提到過的建構函式對類進行初始化時,遵循以下構造順序:

1.當類的成員型別為類的的物件時,首先初始化構造類成員資料。對類成員按照定義順序進行構造,先定義先構造

2.構造完成員在構造自己

下面將舉乙個例子來說明問題,我們首先定義乙個point類

class

point

intgety()

point

(int xx =0,

int yy =0)

:x(xx),y

(yy)

//建構函式

point

(const point & p1)

;//複製建構函式

};

每每使用初始化建構函式時,輸出相應的除錯語句,該類還包含了整數 x y ,

複製建構函式定義如下

point::

point

(const point &p1)

可以看到point類的複製建構函式就是將對應成員 x y 一一複製給另乙個成員。

下面定義乙個line 類,line中包含了這個point 類,對應的line定義如下

class

line

line

(point xp1, point xp2)

;//建構函式

line

(const line &p11)

;//複製建構函式

};

我們看到使用了組合類的方式,使用point類作為line中的資料成員我們來看一下其中建構函式的內容

line::

line

(point xp1, point xp2):p1

(xp1),p2

(xp2)

可以看到使用乙個簡單的初始化列表首先將point初始化,在根據兩個point資料計算距離,並將值賦給 len。

看一下point的複製建構函式

line::

line

(const line &p11 )

以上就是line與point全部資料以及建構函式,下面我們在主函式中呼叫並觀察以下構造的順序。**如下:

# include

# include

using

namespace std;

//類的組合,實際上我們在定義類的成員時通常會定義基礎資料型別,實際上類的成員也可以是類的物件。

//類的組合描述的就是乙個類內嵌其他類作為成員的情況。他們之間的關係是一種包含於被包含的關係

//值得注意的是類的構造順序。

class

point

intgety()

point

(int xx =0,

int yy =0)

:x(xx),y

(yy)

//建構函式

point

(const point & p1)

;//複製建構函式};

point::

point

(const point &p1)

//類的組合

class

line

line

(point xp1, point xp2)

;//建構函式

line

(const line &p11)

;//複製建構函式};

//組合類的建構函式

line::

line

(point xp1, point xp2):p1

(xp1),p2

(xp2)

//組合類複製建構函式

line::

line

(const line &p11 )

intmain()

**執行結果如下:

我們來簡單分析一下程式執行的結果,我們首先再次提及什麼時候用複製建構函式

1.當用乙個已有的類初始化另乙個類會呼叫初始化建構函式。

2.當作為函式的形參虛實結合時呼叫函式複製建構函式

3.當類的物件作為返回值呼叫複製建構函式。

int

main()

以上分析了類的組合以及建構函式的次序,下面介紹類的前向引用宣告,我們知道類是先宣告後使用,當我們遇到兩個類相互呼叫的情況需要類的前向引用宣告。如下

classb;

classa;

class

b;

其中值得注意的是,雖然使用了前向引用宣告,但是在提供乙個完整的類定義之前,不能使用該類的細節,比如

classb;

classa;

class

b;

這樣做是不成立的,因為b不能給出類的完整定義,在定義乙個資料型別時,至少應該知道占用幾個位元組吧?因為沒有完整的細節,所以報錯。

以上就是類的組合以及前向引用宣告的使用。

CSS學習筆記十一 組合選擇符和偽類偽元素

組合選擇符說明了兩個選擇器之間的關係 組合方式 也就是它的子子孫孫 div p 只有兒子女兒才是第一繼承人 div p 也就是住在隔壁的老王 div p 街上鄰居等等各種人 div p 例項 在div元素裡,我是它的兒子,所以我是藍色 而我是孫子,我該是紅色 我不是它的後代,是相鄰兄弟,所以我是綠色...

設計模式C 實現(十一) 組合模式

將物件組合成樹形結構以表示 部分 整體 的層次結構。composite使得使用者對單個物件和組合物件的使用具有一致性。我們實現乙個選單結構,乙個選單可以包含子選單或者選單項 定義乙個抽象類,選單和選單項都繼承自這個類 public abstract class menucomponet public...

C 學習筆記20 類的組合

定義 乙個類內嵌其他類的物件作為成員的情況,他們之間的關係是一種包含與被包含的關係。組合類的建構函式設計 當建立類的物件時,如果這個類具有內嵌物件成員,那麼各個內嵌函式物件將首先被自動建立。在建立物件時既要對本類的基本型別資料成員進行初始化,又要對內嵌物件進行初始化。類名 類名 形參表 內嵌物件1 ...