第一篇

决定从今天开始,以博客形式不定期的记录我成为程序员的道路。

今天写了超级多的程序,时间不够就只把我在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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午7:55
下一篇 2023年2月9日 下午7:55

相关推荐