C++类操作(二)

今天跟大牛聊天,学的少了点!先分享吧

首先总结一下这个例子:

简单来说: 车装箱子!具体功能分析不用了,

这里给出三个类:

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

可以运行的,留着自己用!


原文地址:https://www.cnblogs.com/leisure/p/2216903.html