//stock.h
#include <string>
class stock
{
public:
stock();
stock(const std::string& co,long n=0,double pr=0.0);
stock(const stock& s);
~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;
stock& operator=(const stock& s);
private:
static int num;
std::string company;
int shares;
double share_val;
double total_val;
void set_tot()
{
total_val=shares*share_val;
}
};
//stock.cpp
#include <iostream>
#include "stock.h"
int stock::num=0;
stock::stock():company("no name"),shares(0),share_val(0.0),total_val(0.0){}
stock::stock(const std::string& co,long n,double pr):company(co),shares(n),share_val(pr){set_tot();}
stock::stock(const stock& s)
{
company=s.company;
shares=s.shares;
share_val=s.share_val;
total_val=s.total_val;
}
stock::~stock()
{
std::cout<<std::endl<<++num<<std::endl;
}
void stock::buy(long num,double price)
{
shares+=num;
share_val=(total_val+num*price)/shares;
set_tot();
}
void stock::sell(long num,double price)
{
shares-=num;
share_val=(total_val-num*price)/shares;
set_tot();
}
void stock::update(double price)
{
share_val=price;
set_tot();
}
void stock::show()const
{
using std::cout;
using std::ios_base;
using std::endl;
ios_base::fmtflags orig=cout.setf(ios_base::fixed,ios_base::floatfield);
std::streamsize prec=cout.precision(3);
(cout<<"Company: "<<company<<endl
<<"Shares: "<<shares<<endl
<<"Share Price: $"<<share_val<<endl).precision(2);
cout<<"Total Worth: $"<<total_val<<endl;
cout.setf(orig,ios_base::floatfield);
cout.precision(prec);
}
const stock& stock::topval(const stock& s)const
{
return total_val>s.total_val?*this:s;
}
stock& stock::operator=(const stock& s) //"="必须是成员函数
{
if(this!=&s)
{
company=s.company;
shares=s.shares;
share_val=s.share_val;
total_val=s.total_val;
}
return *this;
}
//stock_test.cpp
#include <iostream>
#include "stock.h"
int main()
{
stock stock1("E",100,10);
stock1=stock("F",200,20);
stock stocks[4]= //对象数组,首先使用默认构造函数创建数组元素,然后花括号中的各构造函数创建临时对象,使用赋值运算符赋值.
{
stock("A",12,20.0),
stock("B",200,2.0),
stock("C",130,3.25),
stock("D",60,6.5)
};
stock top;
for(int i=0;i<4;++i)
{
stocks[i].show();
top=top.topval(stocks[i]);
}
top.show();
while(std::cin.get()!='\n');
return 0;
}