对象构造
如何允许对象在定义的时候赋初值:
- 定义一个特殊的称为构造函数的成员函数,让编译器在定义对象时自动调用该函数
构造函数的用法跟其他成员函数不一样
- 函数名与类名相同
- 无返回值,且不能指明返回类型
eg
#ifndef STOCK00_H_
#define STOCK00_H_
#include <string>
class Stock
{
private:
std::string *company;
long shares;
double share_val;
double total_val;
void set_tot() {total_val = shares * share_val;}
public:
void acquire(const std::string & co, long n, double pr);
void buy(long num, double price);
void sell(long num, double price);
void update(double price);
void show();
};
#endif
构造函数
Stock(const std::string & co, long n, double pr = 0)
{
company = new char[strlen(co) + 1];
strcpy(company, co);
if (n < 0) {
std:cout << "Number of shares can't be negative;"
<< company << " shares set to 0.\n";
shares = 0;
}
else shares = n ;
share_val = pr;
set_tot();
}
隐适调用: 定义对象时自动调用
如: Stock st1("comp1", 20, 3.4)
或: Stock *sp = new Stock("comp1", 20, 3.4)
显示调用
如: Stock st1 = Stock("comp1",20, 3.4)
或: Srock st1 ("comp1", 20, 3.4);
st1 = Stock("comp2", 40, 5.4)
不管有没有定义构造函数,编译器会加一个没有参数的默认构造函数
构造函数是可以重载的
对象析构
对象生命周期结束被销毁前会调用析构函数做一个善后处理
主要是处理对象中的动态空间
如果没有这些特殊处理的情况,不需要定义析构函数,或定义一个空析构函数
如果类中没有定义析构函数,编译器会生成一个空的析构函数(什么事情也不做,要做自己加)
析构函数原型: ~ 类名(){ 函数体 }
没有参数 也没有返回值
~Stock()
{
delete company;
}