19.c/c++程序员面试宝典-this指针
this指针是面向对象程序设计中的一项重要概念,在c++中,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。
面试题91 什么是this指针***
分析:this指针是一个隐含的指针,它是指向对象本身的,表示当前对象的地址。
在一个非静态的成员里面,this关键字就是一个指针,指向该函数的这次调用所针对的那个对象。在类a的非const成员函数里,this的类型是a*,但是this不是一个常规变量,所以不可以获取this的地址或者给它赋值。在类a的const成员函数里,this的类型是const a*,不可以对这个对象本身进行修改。
this指针的一个示例代码如下:
void Data::setMonth(int mn)
{
month = mn;
this->month=mn; //this指针
(*this).month=mn;
}
以上代码中,函数花括号内的3个语句是等价的,说明了this表示当前对象的地址。
【答案】在调用成员函数时,编译器会隐含地插入一个参数,这个参数就是this指针。this指针指向当前对象本身,表示当前对象的地址。
面试题92 何时使用this指针***
分析:当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。this指针的示例代码如下:
class A
{
public:
A()
{a=b=0;}
A(int a,int b)
{
this.a=a;
this.b=b;
}
void copy(A &aa); //对象引用作函数参数
void print()
{cout<<a<<","<<b<<enld;}
private:
int a,b;
};
void A::copy(A &aa)
{
if(this ==&aa) return; //这个this是操作对象a1的地址
*this=aa; //*this操作该成员函数的对象,在这里是对象a1
//对象aa赋给a1,aa具有的数据成员的值赋给a1的数据成员
}
void main()
{
A a1,a2(3,4);
a1.copy(a2);
a1.print();
}
上述代码运行结果如下:
3, 4
【答案】当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针。而通常不去显式地使用this指针来引用数据成员。同样也可以使用*this来标识调用该成员函数的对象。