第一篇
决定从今天开始,以博客形式不定期的记录我成为程序员的道路。
今天写了超级多的程序,时间不够就只把我在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出来的这个对象析构了。。
否则在系统内存空间里就会存在一个对象无法清除。。。必定会让有强迫症的孩子蛋疼啊。。
浙公网安备 33010602011771号