C++中析构函数(Destructor)
类对象在创建时自动调用的构造函数,在对象销毁时也会自动调用一个函数,它也和类名同名,也没有返回值,名字前有一个波浪线~,用来区分构造函数,它的作用主要是用做对象释放后的清理善后工作。它就是析构函数。
与构造函数相同的是,与类名相同,没有返回值,如果用户不定义,系统也会自动生成一个空的析构函数。而一旦用户定义,则对象在销毁时自动调用。
与构造函数不同的是,虽然他俩都为公开类型。构造可以重载,有多个兄弟,而析构却不能重载,但它可以是虚函数,一个类只能有一个析构函数。
我们以Student类为例,继续添加析构函数,同时在构造函数和析构函数中都添加了输出当前类的信息,用来辨别哪一个类的创建和销毁,请大家仔细阅读代码:
#include<iostream>
#include<Cstring>
using namespace std;
class Student
{private:int num;//学号char name[100];//名字int score;//成绩public:Student(int n,char *str,int s);~Student();int print();int Set(int n,char *str,int s);
};
Student::Student(int n,char *str,int s)
{num = n;strcpy(name,str);score = s;cout<<num<<" "<<name<<" "<<score<<" ";cout<<"Constructor"<<endl;
}
Student::~Student()
{cout<<num<<" "<<name<<" "<<score<<" ";cout<<"destructor"<<endl;
}
int Student::print()
{cout<<num<<" "<<name<<" "<<score<<endl;return 0;
}
int Student::Set(int n,char *str,int s)
{num = n;strcpy(name,str);score = s;
}
int main()
{Student A(100,"dot",11);Student B(101,"cpp",12);return 0;
}
主函数中定义了两个对象A和B,对象A和B的构造函数的调用顺序以及构造函数的调用顺序,完全相反!原因在于A和B对象同属局部对象,也在栈区存储,也遵循“先进后出”的顺序!
做实验的时候我将例子做了稍微的改变,但是说明的内容不变,对象在定义的时候,调用构造函数,在销毁时,调用析构函数,遵循栈区存取特点。
C++中析构函数(Destructor)相关推荐
- 什么是php析构函数,php中析构函数的作用是什么
php中析构函数的作用是:释放内存,当对象被销毁时析构函数就会被调用.定义析构函数的语法格式为:[__destruct()].php使用垃圾回收机制,自动清除不再使用的对象,即使不使用unset函数, ...
- C++继承中析构函数 构造函数的调用顺序以及虚析构函数
首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...
- C#中析构函数,命名空间及字符串的运用(Ninth day)
又到了总结知识的时间了,今天在云和学院学习了析构函数,命名空间及字符串的处理,现在就为大家总结下来. 理论: 析构函数 不能在结构中定义析构函数.只能对类使用析构函数. 一个类只能有一个析构函数. 无 ...
- Q9:C++中析构函数的作用
析构函数 析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数. 析构函数名也应与类名相同,只是在函数名前面加一个位取反符 ~,例如 ~stud( ),以 ...
- php中析构函数是自动调用吗,php析构函数什么时候调用
析构函数何时被调用 析构函数在下边3种情况时被调用: 对象生命周期结束,被销毁时: 主动调用delete :(推荐学习:PHP编程从入门到精通) 对象i是对象o的成员,o的析构函数被调用时,对象i的析 ...
- C++中析构函数的作用
析构函数的作用 析构作用 类析构顺序 析构作用 析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统 会自动执行析构函数. 析构函数名也应与类名相同,只是在函数名前面加一个 ...
- python中析构函数的作用,Python-析构函数
析构函数 析构函数:def __del__(self): 在程序结束时自动执行,如果程序没有结束,那么析构函数函数里面的代码不会执行 执行时间: 1 如果该函数在class里面,那么类里面的方法运行完 ...
- C# 中构造函数与析构函数(二)
(二)析构函数 析构函数 · 不能在结构中定义析构函数.只能对类使用析构函数. · 一个类只能有一个析构函数. · 无法继承或重载析构函数. · 无法调用析构函数.它们是被自动调用的. · 析构函数既 ...
- c++中的构造函数和析构函数
构造函数: C++提供了构造函数(constructor)来处理对象的初始化.在建立对象时自动执行.构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值. 构造函数总结: ①构造函数是C++ ...
最新文章
- 计算机中的数制和编码教案,计算机《数制与编码进制转换》公开课教案.doc
- 网关限流了,躲在后面的服务就能高枕无忧啦?
- AI时代,企业如何利用机器学习技术驱动业务发展?
- JAVA——基于HttpComponents(HttpClient)的简单网络爬虫DEMO
- 计算机专业英语的题目,计算机专业英语题目
- 总是记不住java的IO流用法?用N个问题教你掌握java IO流
- 关于泊松过程的参数估计
- 4. PHP递增/递减运算符
- TensorFlow tf.keras.callbacks.EarlyStopping
- 【Hard 递归 动态规划 回文串15】LeetCode 730. Count Different Palindromic Subsequences
- Thinkphp5笔记七:设置错误页面②
- go技巧-json转map
- Google搜索引擎的使用技巧
- 掌握这三种方法!Word、PPT、Excel、JPG、PDF之间任你转换
- 树莓派CM4基于emmc安装Ubuntu系统及初始配置
- Vine已死,秒拍抱团崛起,同是视频社交差距在哪?
- No qualifying bean of type [com.service.UserService] found for dependency: 解决方案
- 《大学计算机基础》课程学习(1)——第1章 计算机基础知识
- android 图片空白,图片显示上下有空白的解决办法
- SQL -- 判断字段值是否为空,假如是空的话,就赋值为0,假如不为空,则赋值就为1