C++笔记:this指针
2018-06-17 22:42:30来源:未知 阅读 ()
*目前刚接触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 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:2973 枪毙
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash