C++ 第一个较难的程序

从暑假开始学C++

到现在终于可以拿出一个看的顺眼的小小程序了。

没什么功能却运用了C++面向对象的思想编写的链表。

#include <IOSTREAM> using namespace std;
 enum{small,large,same};
 //“““““““““““““““““““数据类
 class Date
 {
 public:
  Date(int i):date(i){}
  ~Date(){}
  int compare(const Date&);
  void print(){cout<<date<<endl;}
 private:
  int date;
 };
 
 int Date::compare(const Date&two)
  {
  if (date<two.date)
  return small;
  if (date>two.date)
  return large;
  else
  return same;
  }
 
 //““““““““““““““““链表类
 class Node
 {
 public:
  Node(){}
  virtual ~Node(){}
  virtual Node*insert(Date*one)=0;
  virtual void print()=0;
 private:
 
 };
 
 //“““““““““““““““““中间节点类
 class InterNode:public Node
 {
 public:
  InterNode(Date*one,Node*next);
  ~InterNode(){delete Next;delete thisdate;}
  virtual Node*insert(Date*one);
  virtual void print(){thisdate->print();Next->print();}
 private:
  Date *thisdate;
  Node *Next;
 };
 InterNode::InterNode(Date*one,Node*next):thisdate(one),Next(next){}
 Node*InterNode::insert(Date*one)
 {
  int result = thisdate->compare(*one);
  switch (result)
  {
  case same:;
  case large:
  {
  InterNode*NodeDate = new InterNode(one,this);
  return NodeDate;
  }
  case small:
  {
  Next = Next->insert(one);
  return this;
  }
 
  }
  return this;
 }
 
 //“““““““““““““““““尾节点类
 class TailNode:public Node
 {
 public:
  virtual Node*insert(Date*one);
  virtual void print(){}
 };
 Node *TailNode::insert(Date*one)
 {
  InterNode*datenode = new InterNode(one,this);
  return datenode;
 }
 
 //“““““““““““““““““头节点类 
 class HeadNode:public Node
 {
 public:
  HeadNode();
  ~HeadNode(){delete Next;}
  virtual Node*insert(Date*one);
  virtual void print(){Next->print();}
 private:
  Node *Next;
 };
 Node* HeadNode::insert(Date*one)
 {
  Next = Next->insert(one);
  return this;
 }
 HeadNode::HeadNode()
 {
  Next = new TailNode;
 }
 
 //““““““““““““““““““标签类
 class Label
 {
 public:
  Label();
  ~Label(){delete head;}
  void insert(Date *one);
  void printall(){head->print();}
 private:
  HeadNode *head;
 };
 Label::Label()
 {
  head = new HeadNode;
 }
 void Label::insert(Date *one)
 {
  head->insert(one);
 }
 
 int main()
 {
  Date*pdate;
  int val;
  Label ll;
  for (;;)
  {
  cout<<“什么值?(0为停止):”;
  cin>>val;
  if (!val)
  {
  break;
  }
  pdate = new Date(val);
  ll.insert(pdate);
  }
  ll.printall();
  return 0;
 }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据