C++ Primer Plus第六版编程练习12.3解答
来源:互联网 发布:百度APP软件中心 编辑:程序博客网 时间:2024/06/08 17:23
stock20.h
// stock20.h -- augmented version#ifndef STOCK20_H_#define STOCK20_H_#include <iostream>class Stock{private: char * company; int shares; double share_val; double total_val; void set_tot() { total_val = shares * share_val; }public: Stock(); // default constructor Stock(const char * 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); const Stock & topval(const Stock & s) const; Stock & operator=(const Stock & s); friend std::ostream & operator<<(std::ostream & os, const Stock & s);};#endif
stock20.cpp
// stock20.cpp -- augmented version#include <iostream>#include "stock20.h"#include <cstring>using namespace std;//default constructorStock::Stock(){ company = new char[1]; company[0] = '\0'; shares = 0; share_val = 0.0; total_val = 0.0;}//constructorStock::Stock(const char * co, long n, double pr){ company = new char [strlen(co)+1]; strcpy(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();}//copy constructorStock::Stock(const Stock & s){ company = new char [strlen(s.company)+1]; strcpy(company, s.company); shares = s.shares; share_val = s.share_val; total_val = s.total_val;}//destructorStock::~Stock() // quiet class destructor{ delete [] company;}//other methodsvoid 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();}const Stock & Stock::topval(const Stock & s) const{ if (s.total_val > total_val) return s; else return *this;}Stock & Stock::operator=(const Stock & s){ if(this==&s) return *this; delete [] company; company = new char [strlen(s.company)+1]; strcpy(company, s.company); shares = s.shares; share_val = s.share_val; total_val = s.total_val; return *this;}ostream & operator<<(ostream & os, const Stock & s){ // set format to #.### ios_base::fmtflags orig = os.setf(ios_base::fixed, ios_base::floatfield); streamsize prec = os.precision(3); os << "Company: " << s.company << " Shares: " << s.shares << '\n'; os << " Share Price: $" << s.share_val; // set format to #.## os.precision(2); os << " Total Worth: $" << s.total_val << '\n'; // restore original format os.setf(orig, ios_base::floatfield); os.precision(prec); return os;}
usestock20.cpp
// usestok20.cpp -- using the Stock class// compile with stock20.cpp#include <iostream>#include "stock20.h"const int STKS = 4;int main(){ using std::cout; using std::cin;// create an array of initialized objects Stock stocks[STKS] = { Stock("NanoSmart", 12, 20.0), Stock("Boffo Objects", 200, 2.0), Stock("Monolithic Obelisks", 130, 3.25), Stock("Fleep Enterprises", 60, 6.5) }; cout << "Stock holdings:\n"; int st; for (st = 0; st < STKS; st++) cout << stocks[st]; Stock top = stocks[0]; //use copy constructor for (st = 1; st < STKS; st++) top = ( top.topval(stocks[st]) ); //use overloaded = operator cout << "\nMost valuable holding:\n"; cout<<top; cin.get(); return 0;}
0 0
- C++ Primer Plus第六版编程练习12.3解答
- C++ Primer Plus第六版编程练习6.7解答
- C++ Primer Plus第六版编程练习6.9解答
- C++ Primer Plus第六版编程练习7.10解答
- C++ Primer Plus第六版编程练习8.2解答
- C++ Primer Plus第六版编程练习8.6解答
- C++ Primer Plus第六版编程练习9.1解答
- C++ Primer Plus第六版编程练习9.4解答
- C++ Primer Plus第六版编程练习10.3解答
- C++ Primer Plus第六版编程练习10.4解答
- C++ Primer Plus第六版编程练习10.5解答
- C++ Primer Plus第六版编程练习10.6解答
- C++ Primer Plus第六版编程练习10.8解答
- C++ Primer Plus第六版编程练习11.1解答
- C++ Primer Plus第六版编程练习11.2解答
- C++ Primer Plus第六版编程练习11.3解答
- C++ Primer Plus第六版编程练习11.4解答
- C++ Primer Plus第六版编程练习11.5解答
- Leetcode Reverse Nodes in k-Group
- C++与python交互
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- activity启动的入门
- 身份证号码合法性判断
- C++ Primer Plus第六版编程练习12.3解答
- 线型网络
- 算法导论笔记:25所有节点对的最短路径问题
- wms常用操作
- 初学cococ2dx
- 打开eclipse遇到:Invalid Configuration Location和an error has occurred see the log file问题的解决方法
- LeetCode 19 Remove Nth Node From End of List (C,C++,Java,Python)
- Mybatis 示例之 复杂(complex)属性(property)
- 吼吼