• 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 }


        面向money编程(x)    
               深秋客
  • 相关阅读:
    day36 08-Hibernate抓取策略:批量抓取
    day36 07-Hibernate抓取策略:many-to-one上的抓取策略
    day36 06-Hibernate抓取策略:set集合上的抓取策略
    day36 05-Hibernate检索方式:离线条件查询
    day36 04-Hibernate检索方式:多表连接查询
    day36 03-Hibernate检索方式:排序、参数绑定、投影查询
    【收集】11款Linux数据恢复工具
    【收集】11款Linux数据恢复工具
    7个免费的Linux FTP客户端工具
    7个免费的Linux FTP客户端工具
  • 原文地址:https://www.cnblogs.com/ralfa/p/6771389.html
Copyright © 2020-2023  润新知