C++问题求教!关于“类”析构函数和对象指针

/*定义一个课程类Course,其成员数据包括课程编号id、名称name、学时hours和主讲老师teacherInCharge,实现一个打印自身信息的成员函数print... /*定义一个课程类Course,
其成员数据包括课程编号id、名称name、学时hours和主讲老师teacherInCharge,
实现一个打印自身信息的成员函数printCourse,
定义一个包含三个课程对象的对象数组,
并使用new运算符申请一个匿名对象。
调用printCourse打印四个对象的信息。
⑵ 要求
给出Course类的构造函数和析构函数
⑶ 思路
参考教材中"对象数组和对象指针"的相关代码*/

#include <iostream> // 包含头文件iostream
using namespace std; // 使用命名空间std
class Course
{
public:
Course();
Course(int pId, char* pName, int pHours, char* pTeacherInCharge);
~Course();
void printCourse();
void setCourse(int pId, char* pName, int pHours, char* pTeacherInCharge);
private:
int id;
char *name;
int hours;
char*teacherInCharge;
//类Course的定义
};
Course::Course()
{
id=0;
*name=0;
hours=0;
*teacherInCharge=0;
}

Course::Course(int pId, char* pName, int pHours, char* pTeacherInCharge)
{
id=pId;
name=new char[strlen(pName)+1];
if(name!=0)
strcpy(name,pName);
hours=pHours;
teacherInCharge=new char[strlen(pTeacherInCharge)+1];
if(teacherInCharge!=0)
strcpy(teacherInCharge,pTeacherInCharge);
//Course的构造函数的实现
}
void Course::setCourse(int pId, char* pName, int pHours, char* pTeacherInCharge)
{
id=pId;
name=new char[strlen(pName)+1];
if(name!=0)
strcpy(name,pName);
hours=pHours;
teacherInCharge=new char[strlen(pTeacherInCharge)+1];
if(teacherInCharge!=0)
strcpy(teacherInCharge,pTeacherInCharge);
//Course的成员函数setCourse的实现
}
Course::~Course()
{
cout<<"destructing..."<<endl;
delete [] name;
//Course的析构函数的实现
}
void Course::printCourse()
{
cout<<"id:"<<id<<",name:"<<name<<",hours:"<<hours<<",teacherInCharge:"<<teacherInCharge<<endl;
//Course的成员函数printCourse的实现
}
int main()
{
Course c[3];
c[0].setCourse(1001,"高等数学",56,"zhangsan");
c[1].setCourse(1002,"C++程序设计",64,"lisi");
c[2].setCourse(1003,"管理学基础",48,"wangwu");
Course* pCourse=new Course(1004,"数据结构",72,"zhaoliu");
c[0].printCourse();
c[1].printCourse();
c[2].printCourse();
pCourse->printCourse();
delete pCourse;
return 0;
}
======================
问题:1.程序显示没有错,但是运行的时候却不运行...是不是setCourse函数有问题啊..该怎么写?
2.能具体解释一下“析构函数”的用法么?
3.并使用new运算符申请一个匿名对象。--这是什么意思??
4.name=new char[strlen(pName)+1];
if(name!=0)
strcpy(name,pName);
解释一下这段代码的意思..
谢谢!!感激不尽~
Course::~Course()
{
cout<<"destructing..."<<endl;
if (name != 0)
delete[] name;
name=0;
if (teacherInCharge!= 0)
delete[] teacherInCharge;
teacherInCharge=0;
//Course的析构函数的实现
}
把析构函数改成这个以后程序还是不运行啊,求指正,到底该怎么改??
展开
 我来答
明早3点起
2011-05-19 · 超过28用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:91.8万
展开全部
1:这段代码内存泄漏了。
2:析构函数是相对于构造函数而已的,构造函数是创建对象,而析构函数是释放对象。也就是说,你自己用new关键字在堆上申请的内存空间,需要使用delete释放,否则会造成内存泄漏。
3:new是在堆上申请一段内存地址,存放对象。相对于栈而言,栈是程序自己申请,运行后自己释放,而堆上的内存是程序员自己申请,自己释放,如果没释放,会造成内存泄漏。
4:char* name=new char[strlen(pName)+1]; //strlen和 strcpy是C风格字符串的函数,前者是求数组长度,后者是负责数组。
追问
内存泄露是什么意思?该怎么改正??
追答
if (name != 0) delete[] name;name=0;
if (teacherInCharge != 0) delete[] teacherInCharge;teacherInCharge=0;

同时构造函数改改Course::Course()
{
id=0;
name=0;
hours=0;
teacherInCharge=0;
}
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
小夏1992
2011-05-21
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
内存泄露就是你申请了一段内存空间,而你又没有用。别人也用不了,而且程序结束后这段内存空间依旧被你霸占着,,也就是这段内存以后永远都用不了了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式