今天跟大牛聊天,學的少了點!先分享吧
首先總結一下這個例子:
簡單來說: 車裝箱子!具體功能分析不用了,
這裡給出三個類:
CBox:
View Code
// Box.h: interface for the CBox class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BOX_H__74F0DD0E_E25E_4ED9_AB91_926D101575AC__INCLUDED_)
#define AFX_BOX_H__74F0DD0E_E25E_4ED9_AB91_926D101575AC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CBox
{
public:
CBox(double alength=1.0,double abreadth=1.0,double aheight=1.0);
virtual ~CBox();
double valume() const ;
double getLength() const ;
double getBreath() const ;
double getHeight() const ;
int compareVolume(const CBox & otherBox) const ;
private:
double length;
double breadth;
double height;
};
#endif // !defined(AFX_BOX_H__74F0DD0E_E25E_4ED9_AB91_926D101575AC__INCLUDED_)
CTruckLoad:
View Code
1 // TruckLoad.h: interface for the CTruckLoad class.
2 //
3 //////////////////////////////////////////////////////////////////////
4
5 #if !defined(AFX_TRUCKLOAD_H__1CAA9A07_DA4E_464D_BD8C_79EDCB4C383C__INCLUDED_)
6 #define AFX_TRUCKLOAD_H__1CAA9A07_DA4E_464D_BD8C_79EDCB4C383C__INCLUDED_
7
8 #if _MSC_VER > 1000
9 #pragma once
10 #endif // _MSC_VER > 1000
11 #include "Box.h"
12 #include "Package.h"
13 class CTruckLoad
14 {
15 public:
16 CTruckLoad(CBox *pBox=0,int count=1);
17 CBox *getFirstBox();
18 CBox *getNextBox();
19 void addBox(CBox *pBox);
20 virtual ~CTruckLoad();
21 private:
22 CPackage *pHead;
23 CPackage *pTail;
24 CPackage *pCurrent;
25
26 };
27
28 #endif // !defined(AFX_TRUCKLOAD_H__1CAA9A07_DA4E_464D_BD8C_79EDCB4C383C__INCLUDED_)
CPackage:(用來存放那個Box 功能類似於集裝箱)
View Code
1 // Package.h: interface for the CPackage class.
2 //
3 //////////////////////////////////////////////////////////////////////
4
5 #if !defined(AFX_PACKAGE_H__738E26CA_11CC_4737_874F_7AAF76A9D63A__INCLUDED_)
6 #define AFX_PACKAGE_H__738E26CA_11CC_4737_874F_7AAF76A9D63A__INCLUDED_
7
8 #if _MSC_VER > 1000
9 #pragma once
10 #endif // _MSC_VER > 1000
11 #include "Box.h"
12 class CPackage
13 {
14 public:
15 CPackage();
16 CPackage(CBox * pNewBox):pBox(pNewBox),pNext(0){} //兩種方法之一
17
18 CBox *getBox() const
19 {
20 return pBox;
21 }
22 CPackage * getNext() const
23 {
24 return pNext;
25 }
26 void setNext(CPackage * pPackage)
27 {
28 pNext=pPackage;
29 }
30 virtual ~CPackage();
31 private:
32 CBox *pBox;
33 CPackage * pNext;
34
35 };
36
37 #endif // !defined(AFX_PACKAGE_H__738E26CA_11CC_4737_874F_7AAF76A9D63A__INCLUDED_)
這個執行個體主要有三個問題(今天就解決了兩個唉,再等一天吧)
1.類的存取權限的問題:
這個執行個體裡面,CPackage類只在CTruckLoad裡面用了,所以沒有必要也作為一個獨立的類,這個時候用嵌套類解決的:
View Code
1 // TruckLoad.h: interface for the CTruckLoad class.
2 //
3 //////////////////////////////////////////////////////////////////////
4
5 #if !defined(AFX_TRUCKLOAD_H__1CAA9A07_DA4E_464D_BD8C_79EDCB4C383C__INCLUDED_)
6 #define AFX_TRUCKLOAD_H__1CAA9A07_DA4E_464D_BD8C_79EDCB4C383C__INCLUDED_
7
8 #if _MSC_VER > 1000
9 #pragma once
10 #endif // _MSC_VER > 1000
11 #include "Box.h"
12
13 class CTruckLoad
14 {
15 public:
16 CTruckLoad(CBox *pBox=0,int count=1);
17 CTruckLoad(const CTruckLoad &TLoad);
18 CBox *getFirstBox();
19 CBox *getNextBox();
20 void addBox(CBox *pBox);
21 virtual ~CTruckLoad();
22 private:
23
24
25
26
27 class CPackage
28 {
29 public:
30
31 CPackage(CBox * pNewBox):pBox(pNewBox),pNext(0){} //兩種方法之一
32
33 CBox *getBox() const
34 {
35 return pBox;
36 }
37 CPackage * getNext() const
38 {
39 return pNext;
40 }
41 void setNext(CPackage * pPackage)
42 {
43 pNext=pPackage;
44 }
45
46
47 CBox *pBox;
48 CPackage * pNext;
49
50 };
51 CPackage *pHead;
52 CPackage *pTail;
53 CPackage *pCurrent;
54
55
56 };
57
58 #endif // !defined(AFX_TRUCKLOAD_H__1CAA9A07_DA4E_464D_BD8C_79EDCB4C383C__INCLUDED_)
注意:1.嵌套類在上層裡面的聲明變數需要在類的定義以後!
2.不能有解構函式(為什嗎?目前不知道)
2.對象的副本問題:
當代碼裡面第二次聲明了 load2時,他與load1共用了一些變數 pNext 這類的!當刪除load2是load1將不能用!這個時候要解決的就是對象副本的複製,而不是單純的那樣做!
用引用,用類的引用!
CTruckLoad(const CTruckLoad &TLoad);
然後在複製:
CTruckLoad load2(load1); //建立第一個鏈表的副本
這樣 對象就獨立了 在做其他動作跟 load1沒關係了
可以檢驗:
CBox *pNextBox=load1.getFirstBox();
int count=0;
while(pNextBox)
{
count++;
pNextBox=load1.getNextBox();
}
cout<<"這個程式裡面共有"<<count<<"個對象"<<endl;
類的操作第二季:
付一個程式:http://115.com/file/bhtts521#
類的操作.rar
可以啟動並執行,留著自己用!