文件目录
头文件
//20版本
//头文件
#ifndef STOCK20_H_
#define STOCK20_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:
//两个构造函数
Stock(); //默认构造函数
Stock(const std::string & co, long n=0, double pr=0.0);
~Stock(); //析构函数
void buy(long num,double price);
void sell(long num,double price);
void update(double price);
void show()const;
const Stock & topval(const Stock & s)const;
};
#endif
实现类
#include <iostream>
#include "365-10.7-stock20.hh"
//构造函数详细版本
Stock::Stock() //默认的构造函数
{
std::cout << "默认的构造函数被调用\n";
company = "没有名字";
shares = 0;
share_val = 0.0;
total_val = 0.0;
}
Stock::Stock(const std::string & co,long n,double pr)
{
// std::cout << "构造函数生成" << co << "股票\n";
company = co;
if(n < 0)
{
std::cout << "股票数量不能为负数。" <<company << "股票数量设置为0。\n";
shares = 0;
}
else
{
shares = n;
}
share_val = pr;
set_tot();
}
//类的析构函数
Stock::~Stock() //详细的析构函数
{
// std::cout << "析构函数被调用,再见," <<company << "!\n";
}
//其他函数们
void Stock::buy(long num,double price)//增加持有的股票
{
if(num < 0)
{
std::cout << "购买的股票数量不能为负数。" << "事务终止。\n";
}
else
{
shares += num;//shares = shares+num
share_val = price;
set_tot();
}
}
void Stock::sell(long num, double price)//减少持有的股票
{
using std::cout;
if(num < 0)
{
cout << "购买的股票数量不能为负数。" << "事务终止。\n";
}
else if (num > shares)
{
cout << "你卖的数量不能超过你所拥有的!" << "事务终止。\n";
}
else
{
shares -= num;
share_val = price;
set_tot();
}
}
void Stock::update(double price)
{
share_val = price;
set_tot();
}
void Stock:: show() const
{
using std::cout;
using std::ios_base;
//设置格式为 #.###
ios_base::fmtflags orig = cout.setf(ios_base::fixed,ios_base::floatfield);
std::streamsize prec = cout.precision(3);
cout << "公司名称: " <<company
<<" 股票数量: " << shares << '\n'
<<"每股价格: $" << share_val;
//设置格式为 #.##
cout.precision(2);
cout <<" 股票总价格: $" << total_val << '\n';
//恢复原始格式
cout.setf(orig,ios_base::floatfield);
cout.precision(prec);
}
const Stock &Stock::topval(const Stock &s) const
{
if(s.total_val > total_val)
return s;
else
return *this;
}
使用类
//
#include <iostream>
#include "365-10.7-stock20.hh"
#include "366-10.8-stock20.cpp"//请注意,通常不需要手动包含实现文件,因为编译器和链接器会自动处理这个过程。但在某些特殊情况下,例如模板实现的分离模式,你可能需要手动包含实现文件。
const int STKS = 4;
int main()
{
//创建一个初始化对象数组
Stock stocks[STKS] = {
Stock("纳米智能", 12, 20.0),
Stock("顺丰物流",200,2.0),
Stock("发发奇服装",130,3.25),
Stock("飞利浦企业",60,6.5)
};
std::cout << "持有的股票:\n";
int st;
for(st = 0;st < STKS; st++)
stocks[st].show();
//设置指向第一个元素的指针
const Stock *top = &stocks[0];
for(st = 1;st < STKS; st++)
top = &top->topval(stocks[st]);
//现在top指向最有价值的持有股票
std::cout << "最有价值的持有股票是:\n";
top->show();
return 0;
}
运行效果: