對於類,前面的文章分別簡單講述了什麼是類,以及類的建構函式,類的複製建構函式的作用。前面文章的相關鏈結如下:
類的定義與初始化
複製建構函式與析構函式
那麼下面將介紹組合類,什麼是組合類?組合類有什麼作用呢?通常我們在定義乙個類的物件時,類成員的型別實際上通常為基本資料型別,如 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 ...