đây là bài của mình viết bằng dev_c++:ở chỗ hàm hủy(list::~list()) và hàm add (void list::add(void *chose)) mình chưa hiểu các bạn giúp mình nge.ý nghĩa từng dòng là gì vậy các bạn,mình rất dỡ về con trỏ.
C++ Code:
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #include<iostream.h>
  4. #include<stddef.h>
  5. struct element
  6. {
  7.    element *next;
  8.    void *content;
  9. };
  10. class list
  11. {
  12.    element *head;
  13.    element *current;
  14.    public:
  15.      list()
  16.      {
  17.         head=NULL;
  18.         current=head;
  19.      }  
  20.      ~list();
  21.      void add(void *);
  22.      void first()
  23.      {
  24.         current=head;
  25.      }
  26.      void *nextelement()
  27.      {
  28.          void *adel=NULL;
  29.          if(current!=NULL)
  30.          {
  31.              adel=current->content;
  32.              current=current->next;
  33.          }
  34.          return adel;
  35.      }
  36.      int last()
  37.      {
  38.         return(current==NULL);
  39.      }
  40. };
  41. [B]list::~list()
  42. {
  43.    element *suiv;
  44.    current=head;
  45.    while(current!=NULL)
  46.    {
  47.        suiv=current->next;
  48.        delete current;
  49.        current=suiv;
  50.    }
  51. }
  52. void list::add(void *chose)
  53. {
  54.    element *adel=new element;
  55.    adel->next=head;
  56.    adel->content=chose;
  57.    head=adel;
  58. }
  59. [/B]
  60. class point
  61. {
  62.    int x,y;
  63.    public:
  64.       point(int abs=0,int ord=0)
  65.       {
  66.          x=abs;
  67.          y=ord;
  68.       }
  69.       void display()
  70.       {
  71.          cout<<"toa do : "<<x<<"    "<<y<<endl;
  72.       }
  73. };
  74.  
  75. class list_point :public list,public point
  76. {
  77.    public:
  78.       list_point()
  79.       {
  80.       }
  81.       void display();
  82. };
  83. void list_point::display()
  84. {
  85.    first();
  86.    while(!last())
  87.    {
  88.       point *ptr=(point *)nextelement();
  89.       ptr->display();
  90.    }
  91. }
  92.  
  93. main()
  94. {
  95.    list_point l;
  96.    point a(2,3),b(5,9),c(0,8);
  97.    l.add(&a);l.display();cout<<"----------------\n";
  98.    l.add(&b);l.display();cout<<"----------------\n";
  99.    l.add(&c);l.display();cout<<"----------------\n";
  100.    getch();
  101. }

C++ Code:
  1. list::~list()
  2. {
  3.    element *suiv;
  4.    current=head;
  5.    while(current!=NULL)
  6.    {
  7.        suiv=current->next;
  8.        delete current;
  9.        current=suiv;
  10.    }
  11. }
  12.  
  13. Hàm hủy có nghĩa là hủy những gì đã cấp phát bằng toán tử new. Mình giải thích từng dòng cho bạn hiểu.
  14.  
  15. // Tạo con trỏ suiv (chưa khởi tạo)
  16. element *suiv;
  17.  
  18. // Con trỏ current trỏ đến node đầu của danh sách
  19. current = head
  20.  
  21. // vòng lặp duyệt qua các phần tử của danh sách cho đến khi current = NULL thì dừng
  22. // gán suiv trỏ đến node tiếp theo
  23.  suiv = current->next;
  24.  
  25. // hủy node hiện hành
  26. delete current;
  27.  
  28. // gán suiv cho current để tiếp tục hủy node tiếp theo
  29. current = suiv