C++PrimerPlus(第6版)365-369页 stock股票程序

文件目录

头文件

//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;
}

运行效果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值