this 指针

///方法涉及两个对象时,要使用this指针
///一般来说,所有的类方法都将this指针设置为调用它的对象的地址。
///每个成员函数(包括构造函数和析构函数)都有一个this指针,this指针
///指向调用对象,若方法需要引用整个调用对象,则可使用表达式*this,
///现在可以将*this作为调用对象的别名。
/*
const Stock & Stock::topval(const Stock & s)const
{
    if(s.total_val > total_val)
        return s;
    else
        return *this;
}
*/
///返回类型为引用意味着返回的是调用对象本身,而不是副本。

///stock20.h
#ifndef STOCK20_H_INCLUDED
#define STOCK20_H_INCLUDED

#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_H_INCLUDED
///stock20.cpp
#include <iostream>
#include"stock20.h"
using namespace std;

Stock::Stock()
{

    company = "no name";
    shares = 0;
    share_val = 0.0;
    total_val = 0.0;
}
Stock::Stock(const string & co, long n, double pr)
{

    company = co;
     if(n<0)
    {
        cout <<"Number of shares can't be negative;"
            << company << "shares set to 0.\n";
        shares = 0;
    }
    else
        shares = n;
    share_val = pr;
    set_tot();
}
///class destructor
Stock::~Stock()
{
}
///other methods
void Stock::buy(long num, double price)
{
    if(num<0)
    {
        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)
{
    if(num<0)
    {
        cout << "Numbers 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()
{
    cout <<"Company: " << company
        << " Shares: " << shares << "\n"
        << "Shares Price: $ " << share_val
        << " Total Worth: $ " <<total_val
        << endl;
}*/
void Stock::show() const///
{
    using std::cout;
    using std::ios_base;
    ///set format to #.###
    ios_base::fmtflags orig =
        cout.setf(ios_base::fixed, ios_base::floatfield);
    std::streamsize prec = cout.precision(3);
    cout <<"Company: " << company
        << " Shares: " << shares << "\n"
        << "Shares Price: $ " << share_val;
    ///set format to #.##
    cout.precision(2);
    cout << " Total Worth: $ " <<total_val<< endl;
    ///restore original format
    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 stocks[STKS] =
    {
        Stock("NanoSmart", 12, 20.00);
        Stock("Boffo Objects", 200, 2.0);
        Stock("Moonlight", 130, 3.25);
        Stock("oppa", 183,26.0);
    };
    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]);
    cout << "\nMost valuable holding:\n";
    top->show();
    return 0;

}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/b2utyyomi/article/details/51565866
个人分类: C++
上一篇类的构造函数和析构函数
下一篇vijos 1104
想对作者说点什么? 我来说一句

初学者要了解的指针的简介

2009年12月27日 14KB 下载

c与指针(第二版)

2011年09月27日 35.38MB 下载

c++指针详解指针详解

2009年08月26日 95KB 下载

指针的总结指针的总结

2009年04月19日 24KB 下载

C和C和指针C和指针

2011年03月18日 11.25MB 下载

C语言指针课程PPT

2011年06月21日 4.38MB 下载

指针精通指针精通指针精通

2010年08月23日 273KB 下载

指针 指针教程 指针练习

2010年05月27日 6KB 下载

C和指针C和指针C和指针

2010年03月11日 3.25MB 下载

没有更多推荐了,返回首页

关闭
关闭