关于类得继承,运行时出了点小问题,不知道为什么,望指点

Echogreat 2011-05-12 10:45:08
//2. 首先完成下列person的定义,然后从person类派生一个教师类,新增的属性有:专业,职称,主讲课程(一门),并为这些属性定义相应的方法。(本题不需要设计构造函数)
#include<iostream.h>
#include<string.h>
class person{
char *Name;
int Age;
char Sex;
public:
void Init(char *name, int age, char sex) //初始化对象
{
Name=new char[strlen(name)+1];
strcpy(Name,name);
Age=age;
Sex=sex;
}
~person()
{
delete[]Name;
}
char *GetName() {return Name;}
int GetAge() {return Age;}
char GetSex() {return Sex;}
void show()
{
cout<<"姓名: "<<GetName()<<" "<<"年龄: "<<GetAge()<<" "<<"性别: "<<GetSex()<<" ";
}

};

class teacher: public person
{
protected:
char *professional;
char *title;
char *course;
public:
void init(char *name,int age,char sex,char *pr,char *tit,char *cs)
{
Init(name,age,sex);
professional=new char[strlen(pr)+1];
strcpy(professional,pr);
title=new char[strlen(tit)+1];
strcpy(title,tit);
course=new char[strlen(cs)+1];
strcpy(course,cs);
}

char *get_professional() {return professional;}
char *get_title() {return title;}
char *get_course() {return course;}
void show()
{
person::show ();
cout<<"专业: "<<get_professional()<<" "<<"职称: "<<get_title()<<" "<<"主讲课程: "<<get_course()<<endl;
}
~teacher()
{
delete[]professional;
delete[]title;
delete[]course;
}
};
void main()
{
teacher t[10];
int i;
char ch='y';
char na[7],pr[10],tit[10],cs[9];
int ag;
char se;
while(1)
{
for(i=0;i<2&&ch=='y';i++)
{
cout<<"------输入老师的:名字,年龄,性别,专业,职称,主讲课程------"<<endl;
cin>>na>>ag>>se>>pr>>tit>>cs;
t[i].init(na,ag,se,pr,tit,cs);
t[i].show();
}
cout<<"是否还有老师y/n"<<endl;
cin>>ch;
if(ch=='n')
break;
}
}
...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Echogreat 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 didawanggang 的回复:]
引用 5 楼 echogreat 的回复:

引用 1 楼 pink9527 的回复:
还是指针的问题,暂且可以用,但是输入 . . . . . .就会陷入死循环
#include<iostream.h>
#include<string.h>
#include<stdio.h>
class person
{
char *Name;
int Age;
char Sex;
pu……
[/Quote]啊!!神马意思
didawanggang 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 echogreat 的回复:]

引用 1 楼 pink9527 的回复:
还是指针的问题,暂且可以用,但是输入 . . . . . .就会陷入死循环
#include<iostream.h>
#include<string.h>
#include<stdio.h>
class person
{
char *Name;
int Age;
char Sex;
public:
void Init(char *n……
[/Quote]
防止野指针?
Echogreat 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pink9527 的回复:]
还是指针的问题,暂且可以用,但是输入 . . . . . .就会陷入死循环
#include<iostream.h>
#include<string.h>
#include<stdio.h>
class person
{
char *Name;
int Age;
char Sex;
public:
void Init(char *name, int age, cha……
[/Quote]为什么要置 name=NULL
TheLostMan丶 2011-05-13
  • 打赏
  • 举报
回复
这里的init()函数是做什么用的 以及源代码 能发至邮箱1285470650@qq.com吗 多谢
Echogreat 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lirg8405 的回复:]
你的问题出在这里
teacher t[10];
上面的语句创建了10个实例,所以当主函数main结束的时候,会调用10次析构函数,而你只使用了2个,
所以错误都出在析构函数里面

这些析构函数是错误的
~person()
{
Name=NULL;
delete[]Name;
};
必需修改为:
~person()
{
if (Name != NULL) delet……
[/Quote]那如果我把teacher t[2];也是又错误啊
lirg8405 2011-05-13
  • 打赏
  • 举报
回复
你的问题出在这里
teacher t[10];
上面的语句创建了10个实例,所以当主函数main结束的时候,会调用10次析构函数,而你只使用了2个,
所以错误都出在析构函数里面

这些析构函数是错误的
~person()
{
Name=NULL;
delete[]Name;
};
必需修改为:
~person()
{
if (Name != NULL) delete[]Name;
Name=NULL;

};
同理修改另一个析构函数
xspace_time 2011-05-13
  • 打赏
  • 举报
回复
还是指针的问题,暂且可以用,但是输入 . . . . . .就会陷入死循环
#include<iostream.h>
#include<string.h>
#include<stdio.h>
class person
{
char *Name;
int Age;
char Sex;
public:
void Init(char *name, int age, char sex) //初始化对象
{
Name=new char[strlen(name)+1];
strcpy(Name,name);
Age=age;
Sex=sex;
};
~person()
{
Name=NULL;
delete[]Name;
};
char *GetName() {return Name;};
int GetAge() {return Age;};
char GetSex() {return Sex;};
void show()
{
cout<<"姓名: "<<GetName()<<" "<<"年龄: "<<GetAge()<<" "<<"性别: "<<GetSex()<<" ";
};

};

class teacher: public person
{
protected:
char *professional;
char *title;
char *course;
public:
void init(char *name,int age,char sex,char *pr,char *tit,char *cs)
{
Init(name,age,sex);
professional=new char[strlen(pr)+1];
strcpy(professional,pr);
title=new char[strlen(tit)+1];
strcpy(title,tit);
course=new char[strlen(cs)+1];
strcpy(course,cs);
};

char *get_professional() {return professional;}
char *get_title() {return title;}
char *get_course() {return course;}
void show()
{
person::show ();
cout<<"专业: "<<get_professional()<<" "<<"职称: "<<get_title()<<" "<<"主讲课程: "<<get_course()<<endl;
};
~teacher()
{
professional=NULL;
title=NULL;
course=NULL;
delete[]professional;
delete[]title;
delete[]course;
};
};
int main()
{
teacher t[10];
int i;
char ch='y';
char na[7],pr[10],tit[10],cs[9];
int ag;
char se;
while(1)
{
for(i=0;i<2&&ch=='y';i++)
{
cout<<"------输入老师的:名字,年龄,性别,专业,职称,主讲课程------"<<endl;
cin>>na>>ag>>se>>pr>>tit>>cs;
t[i].init(na,ag,se,pr,tit,cs);
t[i].show();
}
cout<<"是否还有老师y/n"<<endl;
cin>>ch;
if(ch=='n')
break;
}
return 0;
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧