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

原创 2015年11月18日 12:47:24

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++程序员面试宝典

静态存储区 static静态变量 全局变量 栈 局部变量 堆 动态分配的 栈堆:循环的迭代用中 数据量大 则溢出 239 static作用:静态变量的生存周期和作用域...
  • cyuyanchenxi
  • cyuyanchenxi
  • 2017年03月20日 23:28
  • 512

【JAVA程序员面试宝典】2天看完了-谈谈我的理解吧

今天开启阅读了这本书,中断了原计划中算法中级层次的系统性训练,我觉得先看看面试题吧。先给这本书A掉再说。 阅读了一天,大概阅读了一半,有点失望,因为这本书讲解的面试都是基础中的基础,我看着都着急,作者...
  • superMarss
  • superMarss
  • 2014年09月07日 23:44
  • 5172

《程序员面试宝典》学习记录6

印象笔记同步分享:《程序员面试宝典》学习记录6 《程序员面试宝典》学习记录6 第10章 面向对象 10.1 面向对象的基本概念 考点1:面向对象三大特性 1)...
  • u010555622
  • u010555622
  • 2014年08月28日 22:34
  • 1602

22.c/c++程序员面试宝典-类

22.c/c++程序员面试宝典-类
  • gdut2015go
  • gdut2015go
  • 2015年11月20日 09:24
  • 399

《Java程序员面试宝典(第4版)》 试读感想

《Java程序员面试宝典(第4版)》 试读感想         谈到Java程序员面试这个话题,我想,每个从事java开发的人都有一套自己的见解,特别是工作3年以上的。对于学校里将要毕业即将开始找工...
  • chwshuang
  • chwshuang
  • 2015年11月06日 18:11
  • 2698

程序员面试宝典

初次接触编程是在上大学,从C语言的hello world学起,再到后面的C++,JAVA,数据库,计算机网络,WEB开发,汇编,软件工程,编译原理,操作系统,嵌入式编程等等,每学期流水账似的数十门课程...
  • u012155923
  • u012155923
  • 2016年04月02日 22:20
  • 1574

java程序员面试笔试宝典之算法思路总结

1.        如何从链表中删除重复元素(NO2_DeleteDup.java) 1)        遍历链表,把遍历到的值存储到一个hashTable中,在遍历过程中,若当前访问的值在hash...
  • dfsaggsd
  • dfsaggsd
  • 2016年01月24日 11:16
  • 1100

C/C++程序员 面试经历总结

最近在找工作,遇到了一些面试题,很惭愧的是很多都没答上来。     现在把一些问题总结一下,算是记录一下面试的经历吧。   一、嵌入式C语言面试回忆 主观题: 1、在嵌入式系统中,volitate的作...
  • ccf19881030
  • ccf19881030
  • 2013年11月02日 21:38
  • 17138

C++面试宝典 知识点集锦

1.new、delete、malloc、free关系 delete会调用对象的析构函数,和new对应,free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标...
  • u012339746
  • u012339746
  • 2014年06月27日 16:13
  • 4991

android程序员面试宝典

以下问题对做android的都一个自我检测和反馈的功能,其中有很多问题 可以自我扩展和补充。 1AsyncTask使用在哪些场景?它的缺陷是什么?如何解决? AsyncTa...
  • zhuxingchong
  • zhuxingchong
  • 2017年12月11日 10:38
  • 362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:19.c/c++程序员面试宝典-this指针
举报原因:
原因补充:

(最多只允许输入30个字)