zoukankan      html  css  js  c++  java
  • 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

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


  • 相关阅读:
    bugku细心地大象
    【学术篇】一些水的不行的dp
    【笔记篇】莫队算法(一)
    【学术篇】luogu1351 [NOIP2014提高组] 联合权值
    【学术篇】网络流24题——方格取数加强版
    【学术篇】SDOI2009 SuperGCD
    【学术篇】网络流24题——方格取数问题
    【模板篇】A* 寻路算法
    【模板篇】k短路 SDOI2010 魔法猪学院
    【学术篇】SDOI2009 最优图像
  • 原文地址:https://www.cnblogs.com/leisure/p/2216903.html
Copyright © 2011-2022 走看看