this 指针
2016-06-02 12:53
295 查看
///方法涉及两个对象时,要使用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; }
相关文章推荐
- 24款较经典的Page翻页分页css代码
- 仿3721首页模块拖曳移动效果[拖曳…
- 把网站改成黑白色,纪念这次地震中…
- 鼠标经过箭头时,图片会向左或向右…
- ASP中For…Next循环语句
- HTTP返回代码代表的含义(403,404,500,502,504)
- 网页层变成半透明的方法
- 两个onload 、onclick事件处理的办…
- 点击连接弹出窗口层,并且背景变暗…
- yii2中如何使用modal弹窗之基本使用
- 折叠展开收缩效果的栏目分类导航
- MSN网页上点击连接
- 显示非重复数据
- 禁止保存图片或禁止用“另存为”保存…
- iOS多线程篇:NSThread简单介绍和使用
- iOS多线程篇:NSThread简单介绍和使用
- 控制器向视图传递数据的4种方式
- 用鼠标中键改变图象的大小的特效代…
- 点击弹出新窗口
- 世界汽车标志