您的位置:首页 > 编程语言 > C语言/C++

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

2015-11-18 12:47 351 查看
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来标识调用该成员函数的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: