目录
0. 整体概述为什么要引入构造函数
截止到上一节,提供的代码不能直接像 int 或者 结构那样来初始化Stock对象。
常规的初始化语法不适用于类型Stock:
int year = 2001;
struct thing
{
char * pn;
int m;
}
thing amabob = { "hewlosd" , -30 }; //结构的初始化
Stock hot = { "Mary tup", 2304, 4353}; //错误的初始化
不能像上面这样直接Stock初始化的原因是:数据部分是隐藏的,是私有的,程序不能直接访问数据成员。
程序只能通过成员函数来访问数据成员,因此需要设计合适的成员函数,才能成功地将对象初始化。
一般来说,最好是在创建对象时进行初始化:
stock gift;
gift.buy (10, 27.34);
类设计假设用户在调用其他成员函数时,都已经进行了自动初始化,C++将这种特殊的成员函数称为----类构造函数,将专门用于构造对象,将值赋给他们的数据成员。
类构造函数明察与类名相同:Stock 类 一个可能的构造函数是名为 Stock() 的成员函数。
1. 声明和定义构造函数
// stock00.h -- Stock class interface
// 版本 00 类的声明
#ifndef STOCK00_H_
#define STOCK00_H_
#include<string>
class Stock
{
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();
private:
std::string company;
long shares; //股票数量
double share_val; // 每股的价格
double total_val; //股票的总价格
void set_tot()
{
total_val = shares*share_val;
}
};
#endif
需要为Stock 对象提供3个值,构造函数为3个参数,第四个值total_val是其他计算得来,不用提供这个值。
原型如下:
// 声明的原型可能是
Stock ( const string & co , long n = 0, double pr = 0.0 );
构造函数的一种可能的定义是:
// 构造函数定义
Stock::Stock(const string & co , long n , double , pr)
{
company = co;
if (n < 0)
{
std::cout << "股票数量不能设置为0; "
<< company << " shares set to 0. \n";
shares = 0;
}
else
{<