C++ prime 构造函数和析构函数

C++中,由于数据访问状态是私有的,初始化必须通过成员函数完成。构造函数是特殊成员函数,用于对象初始化。析构函数则在特定情况下(如对象生命周期结束或delete内存时)自动调用,用于释放资源。通过代码示例展示了析构函数的调用时机,包括静态存储、自动存储和堆存储对象的情况。
摘要由CSDN通过智能技术生成

数据部分的访问状态是私有的,不能像其他数据类型那样初始化。程序只能通过成员函数来访问数据成员,因此要设计合适的成员函数来将对象初始化。
为此,C++提供了一个特殊的成员函数—类构造函数。

构造函数的申明和定义:

 //constructor 构造函数,没有返回类型。原型位于类声明的共有部分

#include<iostream>
#include<string>
#include<cstring>

class Stock {
      //class declaration
private:
    char company[30];
    int shares;  //股份
    double share_val;
    double total_val;
    //定义位于类声明中的函数自动成为内联函数,省去了调用函数的步骤
    //void set_tot() { total_val = shares * share_val; }
    void set_tot();

public:
    Stock(); //default constructor 默认构造函数
    Stock(const char *co, int n, double pr);   //constructor构造函数,没有返回类型。原型位于类声明的共有部分
    //~Stock();
    void acquire(const char *co, int n, double pr);
    void buy(int num, double price);
    void sell(int num, double price);
    void update(double price);
    void show();
};  //note semicolon at the end

//内联函数也可以写在类声明之外,内联函数的特殊规则要求每个使用他们的文件都对其进行定义,
//因此简便的方法是:将内联定义放在定义类的头文件中
inline void Stock::set_tot()
{
    total_val = shares * share_val;
}

构造函数定义 constructor definition

//默认构造函数,当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。
//在设计类时,通常应提供对所有类成员做隐式初始化的默认构造函数
Stock::Stock(){
    std::strcpy(company, "no name");
    shares = 0;
    share_val = 0.0;
    total_val = 0.0;
} 


//构造函数,代码与acquire()函数相同,但区别在于,程序声明对象时,将自动调用构造函数。
Stock::Stock(const char *co, int n, double pr) {
    std::strncpy(company, co, 29); //truncate co to fit company
    company[29] = '\0'; //保证输入的是字符串
    if (n < 0) {
        std::cerr << "number of shares cannot be negative."
            << company << "shares set to be 0.\n";
        shares = 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值