C++类

来源:互联网 发布:cms 文章收费 编辑:程序博客网 时间:2024/06/06 19:47
/////////////////////////////////////////////////////////////////////////////////  //通常使用两个类,即链表的结点类和链表类,协同表示单链表。  //一个链表包含了零个或多个结点,因此一个类型为List的对象包含有等于零个或多个类型  //为LinkNode的对象。这种关系在面向对象方法中叫做聚合关系,或叫做整体-局部关系。  //为简化问题,设一个单链表的每一个结点中的数据元素为一个整型数据,有4种方法设计  //其数据结构。  ////////////////////////////////////////////////////////////////////////////////    ///////////////////////////////////////1复合类/////////////////////////////////  //利用在LinkNode类中声明友元类的方法,让LinkNode类与List类的成员都能够访问  //LinkNode类的私有数据成员。注意,友元类的关系不具有对称性。在LinkNode类定义中  //声明List是它的友元类,则List类的所有成员都可以直接使用LinkNode的私有成员,不  //必通过接口操作。反之则不然,LinkNode的成员不能直接使用List的私有成员。  ///////////////////////////////////////////////////////////////////////////////  class List;             //List类的前视声明  class LinkNode          //结点类定义  {      friend class List;  //声明List类为友元类  private:      int data;           //数据元素域      LinkNode *link;     //链指针域  };  class List              //List类定义  {  public:      //链表公共操作      ......  private:      LinkNode *first;    //链表头指针  };        //////////////////////////////////////////2嵌套类///////////////////////////////////  //在List类定义的内部对LinkNode类进行定义。由于把LinkNode类定义在List类的private部分,  //这就保证了List类外部的对象和函数不能直接接触到LinkNode类的对象。但LinkNode类的数据  //成员放在它的public部分,使得LinkNode类和List类的成员都能直接访问它们。  ///////////////////////////////////////////////////////////////////////////////////  class List  {  public:      //链表操作      ....      ....      ....  private:      class LinkNode      //嵌套的类      {      public:          int data;       //结点的数据域          LinkNode *link; //结点的指针域      };      LinkNode *first;    //单链表的头指针  };        ////////////////////////////////////3基类和派生类//////////////////////////////////////  //这种结构比较特殊,把LinkNode类声明为基类,List类声明为派生类,建立继承关系,让List类  //继承LinkNode类的数据成员和某些成员函数。这表示了一种“使用”关系。  ///////////////////////////////////////////////////////////////////////////////////////  class LinkNode          //链表结点类  {  protected:      int data;      LinkNode *link;  };  class List:public class LinkNode  {      //链表类,继承链表结点类的数据和操作  private:      LinkNode *first;    //链表头指针  public:      //链表操作      ....      ....      ....  };      /////////////////////////////////用struct定义LinkNode类//////////////////////////////  //使用这种方法定义LinkNode类,使得LinkNode类失去了封装性,但简化了描述。由于在List类  //中把first封装在其内部,属于该List的所有LinkNode实例都成为List实例的私有成员,从而  //保证不被外界直接访问。  /////////////////////////////////////////////////////////////////////////////////////  struct LinkNode         //链表结点结构体  {      int data;      LinkNode *link;  };  class List  {      //链表类,直接使用链表结点结构体的数据和操作  private:      LinkNode *first;    //链表头指针  public:      //链表操作      ....      ....      ....  };  


原创粉丝点击