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();
};
#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;
}
  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值