this 指针

我们知道,每个对象的成员函数都可以操作对象的数据,成员函数如何知道操作的是哪个对象?每个对象都可以通过this指针访问自己的地址。对象的this指针不属于对象的一部分,即this指针不会出现在sizeof的操作结果中。但this指针会在每次非static成员函数调用对象时作为一个隐式参数传递给对象(通过编译器)。

下面通过一个程序来说明this指针如何进行调用的。


#include<iostream>
using namespace std;
using namespace std;

class Test
{

	public:
		Test(int = 0);

		void print() const;

	private:
		int x;




};

Test::Test(int value) : x(value)
{



}
void Test::print() const
{
	cout<<"   x = "<<x;

	cout<<"\n  this->x = "<<this->x;

	cout<<"  \n(*this).x =  "<<(*this).x<<endl;


}

int main()
{
	Test testObject(12);
	testObject.print();

	return 0;
}

程序执行的结果是:


在函数中注意this的使用方式,是this-> 的方式还是(*this). 的方式。


下面在通过稍微复杂一点的函数来说明this指针的使用。

time.h

#ifndef TIME_H
#define TIME_H

class Time
{

public:
	Time(int = 0,int = 0,int = 0 );

	Time &setTime(int ,int ,int );
	Time &setHour(int );
	Time &setMinute(int );
	Time &setSecond(int );

	int getHour() const;
	int getMinute() const;
	int getSecond()const;

	void printUniversal() const;
	void printStandard() const;

private:
	int hour;
	int minute;
	int second;

};

#endif

Time成员函数的实现


Time.cpp

#include<iostream>

using std::cout;
#include<iomanip>

using std::setfill;
using std::setw;

#include "time.h"

Time::Time(int hr,int min,int sec)
{

	setTime(hr,min,sec);
}

Time &Time::setTime(int h,int m,int s)
{

	setHour(h);
	setMinute(m);
	setSecond(s);

	return *this;
}

Time &Time::setHour(int h)
{

	hour = (h >= 0 && h<24) ? h : 0;
	return *this;

}

Time &Time::setMinute(int m)
{

	minute = (m >= 0 && m < 60) ? m: 0;
	return *this;
}

Time &Time::setSecond(int s)
{

	second = (s >=0 && s < 60 ) ? s :0;

	return *this;
}

int Time ::getHour() const
{

	return hour;
}

int Time::getMinute() const
{

	return minute;
}

int Time::getSecond() const
{

	return second;

}

void Time::printUniversal() const
{

	cout<<setfill( '0' )<<setw(2)<<hour<< " : "
		<<setw(2)<<minute<< " : "
		<<setw(2)<<second;

}

void Time::printStandard() const
{

	cout<<((hour == 0||hour == 12) ? 12 : hour % 12)
		<<" : "<<setfill('0')<<setw(2)<<minute
		<<" : "<<setw(2)<<second
		<<(hour < 12 ? " AM " : " PM ");

}

下面是主函数


main函数

#include<iostream>
using std::cout;
using std::endl;
#include "time.h"

int main()
{
	Time t;
	t.setHour(18).setMinute(30).setSecond(22);

	cout<<"Universal time ";
	t.printUniversal();


	cout<<"\n standard time: ";
	t.printStandard();

	cout<<"\n\nNew standard  ";
	t.setTime(20,20,20).printStandard();
	cout<<endl;




	return 0;
}


以下是程序的执行的结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值