析构函数

来源:互联网 发布:自闭倾向 知乎 编辑:程序博客网 时间:2024/06/06 16:58

析构函数

用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。

对象过期时,程序将自动调用一个特殊的成员函数——析构函数来完成清理工作。

析构函数的声明

~Share();

析构函数的定义

Share::~Share() {    cout << "ByeBye!!!" << company << endl;}

析构函数的调用

析构函数的调用是由编译器决定的,通常不应该在代码中显示地调用析构函数

  1. 如果创建的是静态存储类对象,则其析构函数将在程序结束时自动被调用。
  2. 如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时自动被调用。
  3. 如果对象是通过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
原创粉丝点击