有没有大神可以帮我看看这个代码啊
就是我想有一个基类,然后一个单链表类继承他,但是总是有错误 可不可以帮我看一下啊#include<iostream>
using namespace std;
struct D_Node{
double data;
D_Node *next;
};
class Link_List{
public:
Link_List(int num); //初始化节点个数
virtual void Create(D_Node *pHead)=0; //创建单链表
//virtual void D_Insert(double element,int n)=0; //插入节点
virtual void showNode(D_Node *pHead)=0; //显示链表
//virtual void getNode(D_Node *pHead)=0; //获取节点个数
protected:
D_Node node;
int num;
};
Link_List::Link_List(int num){
this->num=num;
}
class S_Link_List:public Link_List{ //单链表继承于Link_List
public:
S_Link_List();
S_Link_List(int num);
D_Node *getHead(){
return pHead;
} //获取头节点
virtual void Create(D_Node *pHead);
virtual void showNode(D_Node *pHead);
private:
D_Node *pHead;
};
S_Link_List::S_Link_List(int num):Link_List(num){
pHead=new D_Node;
pHead->next=NULL;
};
void S_Link_List::Create(D_Node *pHead){
D_Node *temp;
D_Node *p;
temp=pHead;
for(int i=1;i<num;i++){
int a;
p=new D_Node;
cin>>a;
p->data=a;
p->next=NULL;
temp->next=p;
}
temp->data=NULL;
delete temp,p;
}
void S_Link_List::showNode(D_Node *pHead){
cout<<"pHead->";
D_Node *temp;
temp=pHead;
while(temp->next!=NULL){
temp=temp->next;
cout<<temp->data<<"->";
}
delete temp;
cout<<endl;
}
int main(){
cout<<"下面创建单链表,请输入节点个数:";
int NO;
cin>>NO;
cout<<endl;
S_Link_List list(NO);
cout<<"请输入节点数据:";
list.Create(list.getHead());
cout<<endl<<"下面是创建的单链表:"<<endl;
list.showNode(list.getHead());
system("pause");
return 0;
} 本帖最后由 BngThea 于 2017-7-14 13:49 编辑
首先,建议把错误信息也贴出来
可能存在以下问题:
1 基类没有定义默认构造函数,这时调用子类的默认构造函数会出错
2 子链表类缺少析构函数,这样当其对象在作用域消亡时,会导致内存泄漏
3 创建单列表的Create函数逻辑不对,而且 int a的定义请放到循环外,cin语句可能需要输入格式判定,最后的delete语句使用明显不对
4 同样的,在ShowNode函数中的delete使用也存在问题,请注意delete和new配对使用
以下是我修改过可以正确执行的代码:
#include<iostream>
using namespace std;
struct D_Node
{
double data;
D_Node *next;
};
class Link_List
{
public:
Link_List(){}//默认构造
Link_List(int num){ this->num = num;}
virtual void Create(D_Node *pHead) = 0; //创建单链表
virtual void showNode(D_Node *pHead) = 0; //显示链表
protected:
D_Node node;
int num;
};
class S_Link_List:public Link_List
{
public:
S_Link_List(){}
S_Link_List(int num);
~S_Link_List();//析构函数,用来释放内存
D_Node *getHead(){return pHead;} //获取头节点
virtual void Create(D_Node *pHead);
virtual void showNode(D_Node *pHead);
private:
D_Node *pHead;
};
S_Link_List::S_Link_List(int num):Link_List(num)
{
pHead = new D_Node;
pHead->next = NULL;
};
S_Link_List::~S_Link_List()
{
D_Node * temp = pHead;
while (temp->next != NULL)
{
pHead = temp->next;
delete temp;
temp = pHead;
}
}
void S_Link_List::Create(D_Node *pHead)
{
D_Node *temp;
D_Node *p;
temp = pHead;
cout << "请输入第1个节点的数据:";
cin >> pHead->data;
for(int i = 2;i < num + 1; i++)
{
p = new D_Node;
cout << "请输入第 " << i << "个节点的数据:";
cin >> p->data;
pHead->next = p;
pHead = p;
}
pHead->next = NULL;
p = NULL;
pHead = temp;
}
void S_Link_List::showNode(D_Node *pHead)
{
cout << "头部\t->\t";
D_Node *temp = pHead;
while(pHead)
{
cout << pHead->data << "\t->\t";
pHead = pHead->next;
if (!pHead)
cout << "尾部" << endl;
}
pHead = temp;
cout << endl;
}
int main()
上述代码还可以完善,比如对输入的链表数值进行判定,对每次输入的节点数据进行判定等。 BngThea 发表于 2017-7-14 13:06
首先,建议把错误信息也贴出来
可能存在以下问题:
1 基类没有定义默认构造函数,这时调用子类的默认构造 ...
谢谢你
页:
[1]