C++ 析构函数

使用new运算符动态分配了内存空间,则在析构函数中应该使用delete释放掉这部分占用的空间

析构函数没有参数也没有返回值,仅当类对象销毁时调用析构函数

当程序先后创建几个对象时,系统按照后建先析构的原则析构对象,当使用delete调用析构函数时,则按照delete的顺序析构

例如: Student* dd = new Student[2];       delete []dd;

代码:

#include<iostream>
#include<string>
using namespace std;

class myDate
{
public:
    myDate();                         //构造函数
    ~myDate();                         //析构函数
    myDate(int, int, int);            //构造函数

    void setDate(int, int, int);      //设置日期
    void setDate(myDate);             //设置日期
    myDate getDate();                 //获取日期
    void setYear(int);                //设置年
    int getMonth();                   //获取月
    void printDate() const;           //打印日期
private:
    int year, month, day;             //成员变量,表示年、月、日
};
// 在类体外定义成员函数
myDate::myDate()
{
    year = 1970, month = 1, day = 1;
    cout << "myDate构造函数1" << endl;
}
myDate::~myDate()
{
    cout << "myDate析构函数" << endl;
}

myDate::myDate(int y, int m, int d)
{
    year = y; month = m; day = d;
}

void myDate::setDate(int y, int m, int d)
{
    year = y; month = m; day = d;
    return;
}

void myDate::setDate(myDate oneD)
{
    year = oneD.year; month = oneD.month; day = oneD.day;
    return;
}

myDate myDate::getDate()
{
    return *this;
}

void myDate::setYear(int y)
{
    year = y;
    return;
}

int myDate::getMonth()
{
    return month;
}

void myDate::printDate() const
{
    cout << year << "/" << month << "/" << day;
    return;
}
class Student
{
public:
    Student();                          //构造函数
    ~Student();                         //析构函数
    Student(const Student& s);          //复制构造函数

    void setStudent(string, myDate);    //设置学生信息
    void setName(string);               //设置姓名
    string getName();                   //获取姓名
    void setBirthday(myDate);           //设置生日
    myDate getBirthday();               //获取生日
    void printStudent() const;          //打印信息
private:
    string name;                        //姓名
    myDate birthday;                    //生日
};


// 在类体外定义成员函数
Student::Student() :name("NoName"), birthday(myDate()) {};
//Student复制构造函数
Student::Student(const Student& s)
{
    name = "copy" + s.name;
    birthday = s.birthday;
    cout << "Student复制构造函数" << endl;
}
//Student析构函数
Student::~Student()
{
    cout << "Student析构函数" << endl;
}
void Student::setStudent(string s, myDate d)
{
    name = s;
    birthday.setDate(d);
    return;
}

void Student::setName(string n)
{
    name = n;
    return;
}

string Student::getName()
{
    return name;
}

void Student::setBirthday(myDate d)
{
    birthday.setDate(d);
    return;
}

myDate Student::getBirthday()
{
    return birthday;
}

void Student::printStudent() const
{
    cout << "姓名:" << name << "\t生日:";
    birthday.printDate();              //调用类myDate的成员函数
    cout << endl;
}

int main()
{
    //构造顺序 从内到外

    Student stud;
    stud.printStudent();
    Student sy[2] = { Student(),stud };
    for (int i = 0; i < 2; i++)
    {
        sy[i].printStudent();
    }
    cout << endl << endl << endl;

    //指针函数数组与delete语句
    Student* ss[2] = { new Student(),new Student() };
    for (int i = 0; i < 2; i++)
    {
        ss[i]->printStudent();
    }
    Student* dd = new Student[2];
    delete []dd;



}

运行结果:

C++ 析构函数

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
C++

C++ 面向对象第二章 Student学生类

2023-10-4 14:19:51

C++

C++ 静态成员变量

2023-10-4 20:36:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索