怎么解决代码如下:
//Stock20.h:
#ifndef STOCK20_H_
#define STOCK20_H_
#include<string>
class Stock
{
private:
std::string company;
int 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
//Stock20.cpp:
#include<iostream>
#include "Stock20.h"
//构造函数
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;
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::~Stock()//安静的类析构函数
{
}
//其他方法
void Stock::buy(long num,double price)
{
if (num<0)
{
std::cout<<"Number of shares purchased can't be negative."<<
"Transaction is aborted.\n";
}
else
{
shares+=num;
share_val=price;
set_tot();
}
}
void Stock::sell(long num,double price)
{
using std::cout;
if (num<0)
{
cout<<"Number of shares sold can't be negative. "<<
"Transaction is aborted.\n";
}
else if (num>shares)
{
cout<<"You can't sell more than you have!"<<
"Transaction is aborted.\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: "<<company
<<" Shares: "<<shares<<"\n";
cout<<" Share Price: $"<<share_val;
//设置格式为#.##
cout.precision(2);
cout<<" Total Worth: $"<<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;
}
//usestock20.cpp:
#include<iostream>
#include"Stock20.h"
const int STKS=4;
int main()
{
//创建一个初始化对象的数组
Stock stock[STKS]={
Stock("NanoSmart",12,20.0),
Stock("Boffo Objects",200,2.0),
Stock("Monolithic Obelisks",130,3.25),
Stock("Fleep Enterprises",60,6.5)
};
std::cout<<"Stock holdings:\n";
int st;
for (st=0;st<STKS;st++)
stock[st].show();
//将指针设置为第一个元素
const Stock * top=&stock[0];
for (st=1;st<STKS;st++)
top=&top->topval(stock[st]);
//现在指向最有价值的控股
std::cout<<"\nMost valuable holding:\n";
top->show();
return 0;
}
//makefile:
all:a.out
a.out:Stock20.o usestock20.o
$(CXX) $^
//Stock20.h:
#ifndef STOCK20_H_
#define STOCK20_H_
#include<string>
class Stock
{
private:
std::string company;
int 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
//Stock20.cpp:
#include<iostream>
#include "Stock20.h"
//构造函数
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;
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::~Stock()//安静的类析构函数
{
}
//其他方法
void Stock::buy(long num,double price)
{
if (num<0)
{
std::cout<<"Number of shares purchased can't be negative."<<
"Transaction is aborted.\n";
}
else
{
shares+=num;
share_val=price;
set_tot();
}
}
void Stock::sell(long num,double price)
{
using std::cout;
if (num<0)
{
cout<<"Number of shares sold can't be negative. "<<
"Transaction is aborted.\n";
}
else if (num>shares)
{
cout<<"You can't sell more than you have!"<<
"Transaction is aborted.\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: "<<company
<<" Shares: "<<shares<<"\n";
cout<<" Share Price: $"<<share_val;
//设置格式为#.##
cout.precision(2);
cout<<" Total Worth: $"<<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;
}
//usestock20.cpp:
#include<iostream>
#include"Stock20.h"
const int STKS=4;
int main()
{
//创建一个初始化对象的数组
Stock stock[STKS]={
Stock("NanoSmart",12,20.0),
Stock("Boffo Objects",200,2.0),
Stock("Monolithic Obelisks",130,3.25),
Stock("Fleep Enterprises",60,6.5)
};
std::cout<<"Stock holdings:\n";
int st;
for (st=0;st<STKS;st++)
stock[st].show();
//将指针设置为第一个元素
const Stock * top=&stock[0];
for (st=1;st<STKS;st++)
top=&top->topval(stock[st]);
//现在指向最有价值的控股
std::cout<<"\nMost valuable holding:\n";
top->show();
return 0;
}
//makefile:
all:a.out
a.out:Stock20.o usestock20.o
$(CXX) $^