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

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



阅读更多
文章标签: c++ c语言
个人分类: c++、c
想对作者说点什么? 我来说一句

《C与C++程序员面试宝典》电子书

2018年01月30日 9.72MB 下载

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭