析构函数
来源:互联网 发布:自闭倾向 知乎 编辑:程序博客网 时间:2024/06/06 16:58
析构函数
用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。
对象过期时,程序将自动调用一个特殊的成员函数——析构函数来完成清理工作。
析构函数的声明
~Share();
析构函数的定义
Share::~Share() { cout << "ByeBye!!!" << company << endl;}
析构函数的调用
析构函数的调用是由编译器决定的,通常不应该在代码中显示地调用析构函数
- 如果创建的是静态存储类对象,则其析构函数将在程序结束时自动被调用。
- 如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时自动被调用。
- 如果对象是通过new创建的,则它将驻留在栈内存或自由存储中,当使用delete来释放内存时,其析构函数将自动被调用。
改进的Share类
类的声明
//// Created by Administrator on 2017/3/7.//#ifndef PROJECT1_SHARE_H#define PROJECT1_SHARE_H#include <array>using namespace std;class Share {private: string company; long shares; double share_value; double total_value; void set_total(){ total_value = shares * share_value; }public: Share();//默认构造函数 Share(const string &comp , long number , double price);//构造函数 ~Share();//析构函数 void buy(long number , double price); void sell(long number , double price); void update(double price); void show();};#endif //PROJECT1_SHARE_H
类的定义
//// Created by Administrator on 2017/3/7.//#include <iostream>#include "Share.h"Share::Share(const string &comp, long number, double price) { company = comp; if (number < 0){ cout << "The number of shares purchased can not be less than zero, the transaction canceled!" << endl; shares = 0; } else shares = number; share_value = price; set_total();}Share::Share() {}Share::~Share() { cout << "ByeBye!!!" << company << endl;}void Share::buy(long number, double price) { if (number < 0){ cout << "The number of shares purchased can not be less than zero, the transaction canceled!" << endl; } else{ shares += number; share_value = price; set_total(); }}void Share::sell(long number, double price) { if (number < 0){ cout << "The number of shares sold can not be less than zero, the transaction canceled!" << endl; } else if (number > shares){ cout << "The number of shares sold can not be greater than the number of existing shares, the transaction canceled!" << endl; } else{ shares -= number; share_value = price; set_total(); }}void Share::update(double price) { share_value = price; set_total();}void Share::show() { cout << "Company Name: " << company << endl; cout << "Number of shares held:" << shares << endl; cout << "Stock price:" << share_value << endl; cout << "Total stock:" << total_value << endl;}
类的使用
#include <iostream>#include <string>#include "cmake-build-debug/Share.h"using namespace std;int main() { cout << "Using constructors to create new object : " << endl; Share xiong1("alibabab" , 1000 , 18.88); xiong1.show(); Share xiong2 = Share("LENOVO" , 1000 , 9.88); xiong2.show(); cout << "Assigning xiong1 to xiong2 : " << endl; xiong2 = xiong1; xiong1.show(); xiong2.show(); cout << "Using constructors to reset an object : " << endl; xiong1 = Share("JD" , 10000 , 6.4); xiong1.show(); return 0;}
测试结果
H:\Project1\cmake-build-debug\Project1.exeUsing constructors to create new object :Company Name: alibababNumber of shares held:1000Stock price:18.88Total stock:18880Company Name: LENOVONumber of shares held:1000Stock price:9.88Total stock:9880Assigning xiong1 to xiong2 :Company Name: alibababNumber of shares held:1000Stock price:18.88Total stock:18880Company Name: alibababNumber of shares held:1000Stock price:18.88Total stock:18880Using constructors to reset an object :ByeBye!!!JDCompany Name: JDNumber of shares held:10000Stock price:6.4Total stock:64000ByeBye!!!alibababByeBye!!!JDProcess finished with exit code 0
从中我们可以看出析构函数调用的一些规则!
0 0
- 函数 - 构造函数 - 析构函数
- 构造函数、析构函数、虚函数
- 虚函数/构造函数/析构函数
- 构造函数&析构函数&虚函数
- 构造函数,析构函数
- 构造函数,析构函数
- 构造函数+析构函数
- 构造函数/析构函数
- 析构函数 虚函数
- 析构函数 虚函数
- 构造函数 & 析构函数
- 构造函数 析构函数
- 析构函数,构造函数
- 构造函数、析构函数
- 构造函数,析构函数
- 构造函数,析构函数
- 构造函数,析构函数
- 虚函数 析构函数
- js延迟动画效果demo
- AndroidStudio里面怎么取消与SVN的关联
- Python拉勾爬虫——以深圳地区数据分析师为例
- C#笔记整理(三)
- Docker入门系列1:简介
- 析构函数
- 2D效果(近大远小)-----手掌代码
- web.xml中openEntityManagerInViewFilter的作用
- Android 自定义View基础(二)
- Docker入门系列2 安装
- 今天吐槽一下yershop
- Spring源码学习--ConfigurableWebApplicationContext(九)
- 串口小工具KKCOM-Python
- Docker入门系列3:使用