类对象在创建时自动调用的构造函数,在对象销毁时也会自动调用一个函数,它也和类名同名,也没有返回值,名字前有一个波浪线~,用来区分构造函数,它的作用主要是用做对象释放后的清理善后工作。它就是析构函数

与构造函数相同的是,与类名相同,没有返回值,如果用户不定义,系统也会自动生成一个空的析构函数。而一旦用户定义,则对象在销毁时自动调用。

与构造函数不同的是,虽然他俩都为公开类型。构造可以重载,有多个兄弟,而析构却不能重载,但它可以是虚函数,一个类只能有一个析构函数。

我们以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)相关推荐

  1. 什么是php析构函数,php中析构函数的作用是什么

    php中析构函数的作用是:释放内存,当对象被销毁时析构函数就会被调用.定义析构函数的语法格式为:[__destruct()].php使用垃圾回收机制,自动清除不再使用的对象,即使不使用unset函数, ...

  2. C++继承中析构函数 构造函数的调用顺序以及虚析构函数

    首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...

  3. C#中析构函数,命名空间及字符串的运用(Ninth day)

    又到了总结知识的时间了,今天在云和学院学习了析构函数,命名空间及字符串的处理,现在就为大家总结下来. 理论: 析构函数 不能在结构中定义析构函数.只能对类使用析构函数. 一个类只能有一个析构函数. 无 ...

  4. Q9:C++中析构函数的作用

    析构函数 析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数. 析构函数名也应与类名相同,只是在函数名前面加一个位取反符 ~,例如 ~stud( ),以 ...

  5. php中析构函数是自动调用吗,php析构函数什么时候调用

    析构函数何时被调用 析构函数在下边3种情况时被调用: 对象生命周期结束,被销毁时: 主动调用delete :(推荐学习:PHP编程从入门到精通) 对象i是对象o的成员,o的析构函数被调用时,对象i的析 ...

  6. C++中析构函数的作用

    析构函数的作用 析构作用 类析构顺序 析构作用 析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统 会自动执行析构函数. 析构函数名也应与类名相同,只是在函数名前面加一个 ...

  7. python中析构函数的作用,Python-析构函数

    析构函数 析构函数:def __del__(self): 在程序结束时自动执行,如果程序没有结束,那么析构函数函数里面的代码不会执行 执行时间: 1 如果该函数在class里面,那么类里面的方法运行完 ...

  8. C# 中构造函数与析构函数(二)

    (二)析构函数 析构函数 · 不能在结构中定义析构函数.只能对类使用析构函数. · 一个类只能有一个析构函数. · 无法继承或重载析构函数. · 无法调用析构函数.它们是被自动调用的. · 析构函数既 ...

  9. c++中的构造函数和析构函数

    构造函数:  C++提供了构造函数(constructor)来处理对象的初始化.在建立对象时自动执行.构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值. 构造函数总结: ①构造函数是C++ ...

最新文章

  1. 计算机中的数制和编码教案,计算机《数制与编码进制转换》公开课教案.doc
  2. 网关限流了,躲在后面的服务就能高枕无忧啦?
  3. AI时代,企业如何利用机器学习技术驱动业务发展?
  4. JAVA——基于HttpComponents(HttpClient)的简单网络爬虫DEMO
  5. 计算机专业英语的题目,计算机专业英语题目
  6. 总是记不住java的IO流用法?用N个问题教你掌握java IO流
  7. 关于泊松过程的参数估计
  8. 4. PHP递增/递减运算符
  9. TensorFlow tf.keras.callbacks.EarlyStopping
  10. 【Hard 递归 动态规划 回文串15】LeetCode 730. Count Different Palindromic Subsequences
  11. Thinkphp5笔记七:设置错误页面②
  12. go技巧-json转map
  13. Google搜索引擎的使用技巧
  14. 掌握这三种方法!Word、PPT、Excel、JPG、PDF之间任你转换
  15. 树莓派CM4基于emmc安装Ubuntu系统及初始配置
  16. Vine已死,秒拍抱团崛起,同是视频社交差距在哪?
  17. No qualifying bean of type [com.service.UserService] found for dependency: 解决方案
  18. 《大学计算机基础》课程学习(1)——第1章 计算机基础知识
  19. android 图片空白,图片显示上下有空白的解决办法
  20. SQL -- 判断字段值是否为空,假如是空的话,就赋值为0,假如不为空,则赋值就为1

热门文章

  1. 计算机应用与维修一体化课程,计算机工程系积极推进计算机应用专业一体化课程体系建设...
  2. Kindlenbsp;KDKnbsp;Publishing
  3. 给CAD文字快速添加椭圆框方形框圆框的方法
  4. CG100-13五菱单排芯片s9s12ha32-
  5. bitsharesjs库详解二:交易广播
  6. ansible部署负载均衡
  7. 【持续集成和交付】项目环境配置:在Jenkins中运行项目
  8. Java抽象类和抽象方法
  9. 第4章第7节nbsp;二进制信号量(一)
  10. WIFI 6中的资源单元