决定从今天开始,以博客形式不定期的记录我成为程序员的道路。
今天写了超级多的程序,时间不够就只把我在c++课上写的代码贴上来,做一下记录吧。
#include<iostream>
#include<cstring>
using namespace std;
class Student{
private:
char *name;//看到指针就要初始化,给它分配空间!!!
char sex;
double score;
public:
void print();//输出姓名、性别、成绩
Student();//无参
Student(char *n,char s,double sc);//有参
Student(Student &another);//深拷贝
void setName(char *n);//设置姓名
~Student();//析构函数
};
Student::Student(Student &another)
{
name = new char[strlen(another.name)+1];
strcpy(name,another.name);
sex = another.sex;
score = another.score;
}
void Student::print()
{
cout <<"name : "<<name<<endl;
cout <<"sex : "<<sex<<endl;
cout <<"score : "<<score<<endl;
}
Student::Student()
{
name = new char[8];//通过new方法给name 分配空间
strcpy(name,"no name");
sex = 0;
score = 0.0;
}
Student::Student(char *n,char s,double sc)
{
name = new char[strlen(n)+1];
strcpy(name,n);
sex = s;
score = sc;
}
void Student::setName(char *n)
{
name = new char[strlen(n)+1];
strcpy(name,n);
}
Student::~Student()
{
cout <<name<<" destructing"<<endl;
delete [] name;
}
int main()
{
Student s1("wanghan",'m',88.0);
Student s2 = s1;
//Student *ptr;
//ptr = new Student;//不会自己析构,必须自己调用delete 析构。。
//delete ptr;
//ptr = new Student("li",'f',0);//在此之前,先把上一个student delete
//s2.setName("wanghan");
//s1.print();
//s2.print();
//delete ptr;
return 0;
}
写这个程序的时候,我犯的第一个错误就是未用new给char型指针开辟空间,结果编译通过,运行直接爆了。。。
第二个学到的就是如果用
ptr = new Student;//不会自己析构,必须自己调用delete 析构。。
delete ptr;
这个语句定义一个对象的时候,要注意ptr指向下一个对象前,得先把new出来的这个对象析构了。。
否则在系统内存空间里就会存在一个对象无法清除。。。必定会让有强迫症的孩子蛋疼啊。。
原文链接: https://www.cnblogs.com/phoenix-route/archive/2013/03/18/2966885.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/81136
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!