C++笔记:this指针

*目前刚接触C++,所以笔记也会比较简单。

 

在学习this指针时,书中一句

成员函数copy()使用了表达式:

this!=&obj

来判断这种情况。这是一种常用的检测手段。

困扰了我,百思不得其解,在百度以及G家搜索了许久也没有找到明确的答案,遂就自己浅显的知识来解释一下。

 

书中代码如下:

 1 //体会this指针的显式使用
 2 #include<iostream>
 3 using namespace std;
 4 
 5 class Point{
 6 public:
 7     Point(int x,int y){X=x;Y=y;}   //有参构造函数
 8     Point(){X=0;Y=0;}              //无参构造函数
 9     void copy(Point& obj);
10     void displayxy();
11 private:
12     int X,Y;
13 };
14 
15 void Point::copy(Point& obj){
16     if(this!=&obj)                 //this指针的显式使用,避免无意义的更新
17         *this=obj;
18 }
19 void Point::displayxy(){
20     cout<<X<<"";
21     cout<<Y<<endl;
22 }
23 
24 int main(){
25     Point obj1(10,20),obj2;
26     obj2.copy(obj1);
27     obj1.displayxy();
28     obj2.displayxy();
29     return 0;
30 }

程序分析如下:

成员函数copy()用一个Point类的对象(参数obj所引用的对象)的值更新正在操作的对象,为避免下面无意义的更新:

obj2.copy(obj2);

成员函数copy()使用了表达式:
this!=&obj

来判断这种情况。在实际编程中,这是一种常用的检测手段。

 

对于这个程序我不理解的是,为何obj2.copy(obj2);是无意义的?

 

就自己的看法而言:

主函数中obj2并未像obj1一样给它赋值,所以obj2是没有值的,更新了它也没有意义。

所以在调用copy()函数时,使用this!=&obj省去了更新obj2值的步骤。

书中例子主要是想利用copy函数将obj1和obj2都赋值为(10,20),且用这个例子来解释如何显式使用this指针,所以其实将

obj2.copy(obj1);注释掉也是没有关系的,最后输出的obj2会变成(0,0)。

 

还有一些关于检测手段的知识不了解,以后应该会更新。(给自己挖坑x)

 

 

*补充一点关于this指针的知识点:

this指针是一个常量,它不能作为赋值、递增、递减、等运算的目标对象。例如,下面的程序,由于试图给this赋值,所以是错误的。

1 void Point::copy(Point& obj)
2 {
3     if(this!=&obj)
4         this=&obj;//错误,因为不能给常量this赋值
5 }

 

posted @ 2017-04-26 22:22  深秋客  阅读(344)  评论(1编辑  收藏  举报