假设有这么一个库文件
//ss.h
#ifndef STOCK_H_
#define STOCK_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);
~Stock();
//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
当我们想要比较同一个类不同对象里的私有变量total_val时,我们不能直接访问这个值,所以我们可以写一个类函数用来访问这个值
class Stock
{
....
public:
double total() const { return total_cal; }
....
};
但是我们想要换另一种方式
我们将这个方法命名为topval(),
stock1.topval()将访问stock1对象的数据,而stock2.topval()将访问stock2对象的数据。如果相比较两个对象,则将第二个对象的作为参数传递给它。则该函数原型为:
const Stock& topval (const Stock& s ) const;
这里的const表明,该函数不会修改被隐式地访问的对象。
假设要对Stock对象stock1和stock2进行比较,并将比较高的值赋给top对象,可以使用:
top = stock1.topval(stock2);
top = stock2.topval(stock1);
下面来猜想一下topval()的实现:
const Stock& Stock::topval(const Stock& s) const
{
if (s.total_val > total_val)
return s;
else
return ???;
}
else 后面不知道返回什么,这种情况下,c++的解决方法是使用this特殊指针。
this指针指向用来调用成员函数的对象(this 被作为隐藏参数传递给方法)。
则函数则可以这样实现:
const Stock& Stock::topval(const Stock& s) const
{
if (s.total_val > total_val)
return s;
else
return *this;
}
注意:
每个成员函数(包括构造函数和析构函数)都有一个this指针。this指针指向调用对象。如果方法要引用整个调用对象,则可以可以使用*this。返回的并不是this,因为this是对象的地址,而是对象本身,即*this。
下面是具体的代码:
//ss.h
#ifndef STOCK_H_
#define STOCK_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);
~Stock();
//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();
const Stock& topval(const Stock& s) const;
};
#endif
//file00.cpp
#include<iostream>
#include"ss.h"
const Stock& Stock::topval(const Stock& s) const
{
if (s.total_val > total_val)
return s;
else
return *this;
}