C++ Primer Plus 10章源码

C++ Primer Plus 第十章书上源码

记录我看C++ Primer Plus(第六版)第十章源代码

10.1

//10.1
#ifndef STOCK00_H_
#define STOCK00_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:
        void acquire(const std::string &co, long n, double pr);
        void buy(long num, double price);
        void sell(long num, double price);
        void update(double price);
        void show();
};
#endif

10.2

//10.2
#include<iostream>
#include"stock00.h"
void Stock::acquire(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();
}
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()
{
    std::cout << "Company: " << company
              << " Shares: " << shares << "\n"
              << " Shar Price: $" << share_val
              << " Total Worth: $" << total_val << "\n";
}

10.3

#include<iostream>
#include"stock00.cpp"
int main()
{
    Stock fluffy_the_cat;
    fluffy_the_cat.acquire("NanoSmart", 20, 12.50);
    fluffy_the_cat.show();
    fluffy_the_cat.buy(15,  18.125);
    fluffy_the_cat.show();
    fluffy_the_cat.sell(400, 20.00);
    fluffy_the_cat.show();
    fluffy_the_cat.buy(300000,40.125);
    fluffy_the_cat.show();
    fluffy_the_cat.sell(300000, 0.125);
    fluffy_the_cat.show();
    return 0;
}

10.4

//10.4
#ifndef STOCK10_H_
#define STOCK10_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();
};
#endif

10.5

//10.5
#include<iostream>
#include"stock10.h"
        Stock::Stock()
        {
                std::cout << "Default constructor called\n";
                company = "no name";
                shares = 0;
                share_val = 0.0;
                total_val = 0.0;
        }
        Stock::Stock(const std::string &co, long n , double pr )
        {
                std::cout << "Constructor using " << co << " called\n";
                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()
        {
                std::cout << "Bye, " << company << "!\n";
        }
        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()
        {
                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);
        }

10.6

#include<iostream>
#include"stock10.cpp"
int main()
{
    {
        using std::cout;
        cout << "Using constructors to create new objects\n";
        Stock stock1("NanoSmart", 12, 20.0);
        stock1.show();
        Stock stock2 = Stock("Boffo Objects", 2, 2.0);
        stock2.show();

        cout << "Assigning stock1 to stock2:\n";
        stock2 = stock1;
        cout << "Listing stock1 and stock:\n";
        stock1.show();
        stock2.show();

        cout << "Using a constructor to reset an object\n";
        stock1 = Stock("Nifty Foods", 10, 50.0);
        cout << "Revised stock1:\n";
        stock1.show();
        cout << "Done\n";
    }
    return 0;
}

10.7

//10.7
#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

10.8

//10.8
#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 abotted.\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! "
             << "Transation 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;
}

10.9

#include<iostream>
#include"stock20.cpp"
const int STKS = 4;
int main()
{
    Stock stocks[STKS] = {
        Stock("NanoSmart", 12, 20.0),
        Stock("Boffo Objects", 200, 2.0),
        Stock("Monolithic Obelisks", 130, 3.25),
        Stock("Fleep Enterprisee", 60, 6.5)};
    std::cout << "Stock holdings:\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]);
    std::cout << "\nMost valuable holding:\n";
    top->show();
    return 0;
}

10.10

//10.10
#ifndef STACK_H_
#define STACK_H_
typedef unsigned long Item;
class Stack
{
private:
    enum
    {
        MAX = 10
    };
    Item items[MAX];
    int top;
public:
    Stack();
    bool isempty() const;
    bool isfull() const;
    bool push(const Item &item);
    bool pop(Item &item);
};
#endif

10.11

//10.11
#include"stack.h"
Stack::Stack()
{
    top = 0;
}
bool Stack::isempty() const
{
    return top == 0;
}
bool Stack::isfull() const
{
    return top == MAX;
}
bool Stack::push(const Item &item)
{
    if(top<MAX)
    {
        items[top++] = item;
        return true;
    }
    else
        return false;
}
bool Stack::pop(Item &item)
{
    if(top>0)
    {
        item = items[--top];
        return true;
    }
    else
        return false;
}

10.12

#include<iostream>
#include<cctype>ss
#include"stack.cpp"
int main()
{
    using namespace std;
    Stack st;
    char ch;
    unsigned long po;
    cout << "Please enter A to add a purchase order,\n"
         << "P to process aPO, or Q to quit.\n";
    while(cin>>ch&&toupper(ch!='Q'))
    {
        while(cin.get()!='\n')
            continue;
        if(!isalpha(ch))
        {
            cout << '\a';
            continue;
        }
        switch(ch)
        {
            case'A':
            case'a':
                cout << "Enter a PO number to add: ";
                cin >> po;
                if(st.isfull())
                    cout << "stack already full\n";
                else
                    st.push(po);
                break;
            case'p':
            case'P':
                    if(st.isempty())
                        cout << "stack already empty\n";
                    else
                    {
                        st.pop(po);
                        cout << "PO #" << po << " popped\n";
                    }
                    break;
        }
       cout << "Please enter A to add a purchase order,\n"
         << "P to process aPO, or Q to quit.\n"; 
    }
    cout << "Bye\n";
    return 0;
}

猜你喜欢

转载自blog.csdn.net/damowangsx/article/details/107725988