3.析构函数

3.析构函数

用类创建一个对象,这个对象使用完毕后,就会调用析构函数,析构函数主要完成清理工作。类的对象时放在栈里面。

析构函数没有返回值和类型声明。

eg:如果构造函数使用new来分配内存,析构函数就需要delete来释放这些内存。

复制代码
Stock::~Stock()
{
​
}

Stock.h

复制代码
#pragma once
#ifndef __Stock__H__
#define __Stock__H__
#include <string>
class Stock
{
private:
    std::string company;
    long num;
    double price;
    double all_price;
    void set_total() { all_price = price * num; }
​
public:
    //void acquire(const std::string &com, double pr, long n);
    Stock(const std::string& com, double pr, long n);
    ~Stock();
    void buy(double n, double pr);
    void sell(double n, double pr);
    void update(double pr);
    void show();
​
​
};
​
#endif

Stock.cpp

复制代码
#include "Stock.h"
#include <iostream>
/*
void Stock::acquire(const std::string& com, double pr, long n)
{
    company = com;
    if (n < 0)
    {
        std::cout << "n < 0 is error!" << std::endl;
        //num = 0;
    }
    else
    {
        num = n;
    }
    price = pr;
    set_total();
}
*/
​
Stock::Stock(const std::string& com, double pr, long n)
{
    company = com;
    if (n < 0)
    {
        std::cout << "n < 0 is error!" << std::endl;
        //num = 0;
    }
    else
    {
        num = n;
    }
    price = pr;
    set_total();
}
Stock::~Stock()
{
    std::cout << "Stock " << company << " is destroyed." << std::endl;
}
void Stock::buy(double n, double pr)
{
    if (n < 0)
    {
        std::cout << "n < 0 is error!" << std::endl;
        //num = 0;
    }
    else
    { 
        num += n;
        price = pr;
        set_total();
    }
}
​
​
void Stock::sell(double n, double pr)
{
    if (n < 0)
    {
        std::cout << "n < 0 is error!" << std::endl;
    }
    else if(n > num)
    {
        std::cout << "n < 0 is error!" << std::endl;
    }
    else
    {
        num = num - n;
        price = pr;
        set_total();
    }
}
​
void Stock::update(double pr)
{
    price = pr;
    set_total();
}
​
void Stock::show()
{
    std::cout << "company: " << company << std::endl;
    std::cout << "num: " << num << std::endl;
    std::cout << "price: " << price << std::endl;
    std::cout << "all_price: " << all_price << std::endl;
}

.

userstock00.cpp

复制代码
#include "Stock.h"
int main()
{
    Stock stock1 = Stock("Apple Inc.", 150.0, 100); //显式地调用构造函数
    Stock stock2("world Cabbage", 250, 1.25);//隐式地调用构造函数
    //stock.acquire("Apple Inc.", 150.0, 100);
    stock1.show();
    //stock.buy(50, 155.0);
    stock2.show();
}

printf:

复制代码
company: Apple Inc.
num: 100
price: 150
all_price: 15000
company: world Cabbage
num: 1
price: 250
all_price: 250
Stock world Cabbage is destroyed.##类的对象时放在栈里面。所以先入后出。
Stock Apple Inc. is destroyed.
​
D:\QT_C++_code\NO.10\1\Project1\x64\Debug\Project1.exe (进程 11848)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

复制代码
stock1 = stock2;
stock1.show();
//stock.buy(50, 155.0);
stock2.show();

类与类之间可以直接赋值。

复制代码
//错误
const Stock land = Stock("Apple Inc.", 150.0, 100);//这个是常量,但是show函数中没有任何保护机制来确保变量不被修改,因而会报错。
land.show();

可以这样改,变成 const成员函数

复制代码
void stock::show() const
{
 ...
}

总结:

构造函数的名称与类名相同,但通过函数重载,可以创建多个同名的构造函数,条件是每个函数的特征标不同。

复制代码
Bozo(const char * fname, const char * lname);
//初始化对象 
Bozo bozetta = Bozo("dfsdf", "fbccbc");
Bozo fufu("dfsdfsdas", "fbccbczxcxz");
Bozo *pc = new Bozo("dfsdf", "fbccbc");

默认构造函数无参数,因此创建对象时没有进行显示初始化,就将调用默认构造函数。如果程序中没有提供任何构造函数,编译器会提供一个默认构造函数;否则必须自己提供默认构造函数。默认构造函数可以没有任何参数,如果有,则必须给所有参数提供默认值。

每个类只能有一个析构函数。构造函数中用了new,必须提供使用了delete的析构函数

相关推荐
其实防守也摸鱼4 分钟前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
木喃的井盖7 分钟前
无锁队列细节
c++·工程
王老师青少年编程25 分钟前
csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:输出亲朋字符串
c++·字符串·csp·高频考点·信奥赛·专项训练·输出亲朋字符串
WBluuue1 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
小郑加油1 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦1 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp2 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy2 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode2 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
iCxhust2 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理