动态申请空间和删除
class Student
{public:
Student(char* nump, char* namep, int score)//字符串数组,用指针
{
if (nump) strcpy(Num, nump);
else strcpy(Num, " ");//赋值为空串,不是空指针
if (namep)
{
Name = new char[strlen(namep) + 1];
strcpy(Name, namep);
}
else Name = NULL;//赋值为空指针,不是空串
Score = score;
}
void Show()
{
cout<<Num<<'\t'<<Name<<'\t'<<Score;
}
~Student()
{
if(Name) delete[]Name;//释放申请的空间
}
private:
char Num[10];//有串空间
char* Name;//没有串空间
int Score;
};
int main()
{
Student a("210300", "suxin", 99);
a.Show();
return 0;
}
1.有串空间,若输入值为0.是一个空字符串; 没有串空间,是一个NULL指针。
2.系统会先执行析构函数,再去进行撤销空间。
Name = new char[strlen(namep) + 1];
if(Name) delete[ ]Name;
记住这两个的书写方法
3.看一看缺省构造函数:类内声明,类外定义
4.什么时候要用拷贝构造函数?
如果不用的话,系统是可以自动生成的,但是拷贝出来得东西占用同一个空间,在有动态申请空间时,析构函数释放的过程中,该空间释放一次后,无法进行第二次释放,导致程序出错。当静态空间,就不会出现这个问题。
就是这样的区别。
####
第二种be like
5.
c,有两个构造函数和一个析构函数,构造函数包括一个无参缺省构造函数和一个拷贝构造函数