19.c/c++程序员面试宝典-this指针

来源:互联网 发布:淘宝卖lol龙虾啥是抽 编辑:程序博客网 时间:2024/06/05 14:03

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来标识调用该成员函数的对象。



0 0