c++的构造函数和析构函数

1.构造函数:

   ●作用:专门用于构造新对象,给新对象赋予初值

   ●特点:没有返回值,返回值也不是void类型,如 Stock::Stock(string & com,long shar);这样

   ●原型位于类声明的public部分

   ●程序声明对象时,会自动调用构造函数

   ●构造函数的参数名不能与类的成员相同,否则容易引起混乱,为避免混乱,通常有两种方法

        ☉将类的数据成员的名称前加m_前缀

class Stock
{
private:
   string m_company;
   long m_shares;
   ...
}

        ☉将类的数据成员的名称后加_后缀

class Stock
{
private:
    string company_;
    long shares_;
    ...
}
     ●调用构造函数的方法

       ☉显式调用:

Stock food = Stock("World Cabbage", 250, 12.3);
       ☉隐式调用:

Stock food("World Cabbage", 250, 12.3);

     ●构造函数是用来创建对象的,不能用来被对象调用

   ●如果我们没有定义构造函数,则编译器帮我们提供默认构造函数
   ●只有当我们没有定义构造函数时,编译器才会帮我们提供构造函数;当我们定义了构造函数时,我们必须也提供默认构造函数,不然当出现如下定义时会出错  Stock stock;当出现这样定义对象时会出错,因为定义对象时就会自动调用构造函数,而我们定义的构造函数有参数,这时就会出错

   ●定义默认构造函数的方法有两种

        ☉给已有构造函数的所有参数提供默认值

Stock::Stock(const string & comp = "No name", long shares = 0, float price = 0);
        ☉是构造函数没有参数

Stock::Stock();


2.析构函数

   ●对象过期时,程序将调用析构函数,析构函数完成清理工作。

   ●析构函数没有参数,没有返回值,在类名前加上~就构成了析构函数。 如 ~Stock();

   ●通常不应在代码中显式的调用析构函数。如果创建的是静态对象,则析构函数在程序结束时自动调用。如果是用new创建的动态对象,则析构函数在程序使用delete释放内存时自动调用

   ●如果程序中我们没有定义析构函数,则编译器会提供一个默认析构函数


3.构造函数、析构函数使用实例:

文件结构:



stock10.h代码:

#ifndef STOCK10_H_INCLUDED
#define STOCK10_H_INCLUDED

#include <string>
using namespace std;

class Stock
{
    private:
        string company;
        long shares;
        float price;
        float total;
        void setTotal()
        {
            total = shares * price;
        }
    public:
        Stock();  //默认构造函数
        Stock(const string & comp, long shar, float pric); //构造函数
        ~Stock();  //析构函数
        void buy(long shar, float pric);
        void sell(long shar, float pric);
        void show();
};
#endif // STOCK10_H_INCLUDED
stock10.cpp代码:

#include <iostream>
#include "stock10.h"
using namespace std;

Stock::Stock()            //定义默认构造函数
{
    company = "No name";
    shares = 0;
    price = 0.0;
    setTotal();
}

Stock::Stock(const string & comp, long shar, float pric)  //定义构造函数
{
    company = comp;
    shares = shar;
    price = pric;
    setTotal();
}

Stock::~Stock()       //析构函数
{

}

void Stock::buy(long shar, float pric)
{
    if(shar < 0)
        cout << "Cannot buy a nagitive number of shares.\n";
    else
        shares += shar;
    price = pric;
    setTotal();
}

void Stock::sell(long shar, float pric)
{
    if(shar < 0)
        cout << "Cannot sell a nagitive number of shares.\n";
    else if(shares < shar)
        cout << "Cannot sell a larger number of shares.\n";
    else
        shares -= shar;
    price = pric;
    setTotal();
}

void Stock::show()
{
    cout << "Company : " << company << endl;
    cout << "Shares : " << shares << endl;
    cout << "Price : " << price << endl;
    setTotal();
    cout << "Total : " << total << endl << endl;
}
main.cpp代码:

#include <iostream>
#include "stock10.h"
using namespace std;

int main()
{
    Stock wlu = Stock("Coo.liu", 1200, 12.3);  //调用构造函数
    wlu.show();

    Stock flutty;  //调用默认构造函数
    flutty.show();
    flutty.buy(1000, 13.2); //调用buy这个函数
    flutty.show();
    flutty.sell(500, 14.3);
    flutty.show();
    return 0;
}
运行结果:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值