鱼C论坛

 找回密码
 立即注册
查看: 2432|回复: 2

有没有大神可以帮我看看这个代码啊

[复制链接]
发表于 2017-7-13 22:22:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是我想有一个基类,然后一个单链表类继承他,但是总是有错误 可不可以帮我看一下啊
  1. #include<iostream>
  2. using namespace std;
  3. struct D_Node{
  4.         double data;
  5.         D_Node *next;
  6. };
  7. class Link_List{
  8. public:
  9.         Link_List(int num);                                                                   //初始化节点个数
  10.         virtual void Create(D_Node *pHead)=0;          //创建单链表
  11.         //virtual void D_Insert(double element,int n)=0;                        //插入节点
  12.         virtual void showNode(D_Node *pHead)=0;                 //显示链表
  13.         //virtual void getNode(D_Node *pHead)=0;                //获取节点个数
  14. protected:
  15.         D_Node node;
  16.         int num;
  17. };
  18. Link_List::Link_List(int num){                    
  19.         this->num=num;
  20. }
  21. class S_Link_List:public Link_List{                                                //单链表  继承于Link_List
  22. public:
  23.         S_Link_List();
  24.         S_Link_List(int num);
  25.         D_Node *getHead(){
  26.         return pHead;
  27. }                               //获取头节点
  28.         virtual void Create(D_Node *pHead);
  29.         virtual void showNode(D_Node *pHead);
  30. private:
  31.         D_Node *pHead;
  32. };
  33. S_Link_List::S_Link_List(int num):Link_List(num){
  34.         pHead=new D_Node;
  35.         pHead->next=NULL;
  36. };
  37. void S_Link_List::Create(D_Node *pHead){
  38.         D_Node *temp;
  39.         D_Node *p;
  40.         temp=pHead;
  41.         for(int i=1;i<num;i++){
  42.                 int a;
  43.                 p=new D_Node;
  44.                 cin>>a;
  45.                 p->data=a;
  46.                 p->next=NULL;
  47.                 temp->next=p;
  48.         }
  49.         temp->data=NULL;
  50.         delete temp,p;
  51. }
  52. void S_Link_List::showNode(D_Node *pHead){
  53.         cout<<"pHead->";
  54.         D_Node *temp;
  55.         temp=pHead;
  56.         while(temp->next!=NULL){
  57.                 temp=temp->next;
  58.                 cout<<temp->data<<"->";
  59.        
  60.         }
  61.         delete temp;
  62.         cout<<endl;
  63. }
  64. int main(){
  65.         cout<<"下面创建单链表,请输入节点个数:";
  66.         int NO;
  67.         cin>>NO;
  68.         cout<<endl;
  69.         S_Link_List list(NO);
  70.         cout<<"请输入节点数据:";
  71.         list.Create(list.getHead());
  72.         cout<<endl<<"下面是创建的单链表:"<<endl;
  73.         list.showNode(list.getHead());
  74.         system("pause");
  75.         return 0;
  76. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-14 13:06:37 | 显示全部楼层
本帖最后由 BngThea 于 2017-7-14 13:49 编辑

首先,建议把错误信息也贴出来
可能存在以下问题:
1 基类没有定义默认构造函数,这时调用子类的默认构造函数会出错
2 子链表类缺少析构函数,这样当其对象在作用域消亡时,会导致内存泄漏
3 创建单列表的Create函数逻辑不对,而且 int a的定义请放到循环外,cin语句可能需要输入格式判定,最后的delete语句使用明显不对
4 同样的,在ShowNode函数中的delete使用也存在问题,请注意delete和new配对使用

以下是我修改过可以正确执行的代码:
  1. #include<iostream>
  2. using namespace std;

  3. struct D_Node
  4. {
  5.         double data;
  6.         D_Node *next;
  7. };

  8. class Link_List
  9. {
  10. public:
  11.         Link_List(){}//默认构造
  12.         Link_List(int num){ this->num = num;}
  13.         virtual void Create(D_Node *pHead) = 0;          //创建单链表
  14.         virtual void showNode(D_Node *pHead) = 0;        //显示链表

  15. protected:
  16.         D_Node node;
  17.         int num;
  18. };


  19. class S_Link_List:public Link_List
  20. {   
  21. public:
  22.         S_Link_List(){}
  23.         S_Link_List(int num);
  24.         ~S_Link_List();//析构函数,用来释放内存
  25.         D_Node *getHead(){return pHead;} //获取头节点
  26.         virtual void Create(D_Node *pHead);
  27.         virtual void showNode(D_Node *pHead);
  28. private:
  29.         D_Node *pHead;
  30. };

  31. S_Link_List::S_Link_List(int num):Link_List(num)
  32. {
  33.         pHead = new D_Node;
  34.         pHead->next = NULL;
  35. };

  36. S_Link_List::~S_Link_List()
  37. {
  38.         D_Node * temp = pHead;
  39.         while (temp->next != NULL)
  40.         {
  41.                 pHead = temp->next;
  42.                 delete temp;
  43.                 temp = pHead;
  44.         }        
  45. }

  46. void S_Link_List::Create(D_Node *pHead)
  47. {
  48.         D_Node *temp;
  49.         D_Node *p;
  50.         temp = pHead;

  51.         cout << "请输入第1个节点的数据:";
  52.         cin >> pHead->data;

  53.         for(int i = 2;i < num + 1; i++)
  54.         {
  55.                 p = new D_Node;
  56.                 cout << "请输入第 " << i << "个节点的数据:";
  57.                 cin >> p->data;
  58.                 pHead->next = p;
  59.                 pHead = p;
  60.         }
  61.         pHead->next = NULL;        
  62.         p = NULL;
  63.         pHead = temp;
  64. }

  65. void S_Link_List::showNode(D_Node *pHead)
  66. {
  67.         cout << "头部\t->\t";
  68.         D_Node *temp = pHead;
  69.         while(pHead)
  70.         {               
  71.                 cout << pHead->data << "\t->\t";
  72.                 pHead = pHead->next;
  73.                 if (!pHead)
  74.                      cout << "尾部" << endl;                              
  75.         }
  76.         pHead = temp;
  77.         cout << endl;
  78. }


  79. int main()
复制代码


上述代码还可以完善,比如对输入的链表数值进行判定,对每次输入的节点数据进行判定等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-21 19:59:31 | 显示全部楼层
BngThea 发表于 2017-7-14 13:06
首先,建议把错误信息也贴出来
可能存在以下问题:
1 基类没有定义默认构造函数,这时调用子类的默认构造 ...

谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 08:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表