C++類操作(二)

來源:互聯網
上載者:User

今天跟大牛聊天,學的少了點!先分享吧

首先總結一下這個例子:

簡單來說: 車裝箱子!具體功能分析不用了,

這裡給出三個類:

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

可以啟動並執行,留著自己用!

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.