博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
‘this’ pointer in C++
阅读量:4285 次
发布时间:2019-05-27

本文共 2003 字,大约阅读时间需要 6 分钟。

轉載自 

‘this’ pointer in C++

The ‘this’ pointer is passed as a hidden argument to all nonstatic member function calls and is available as a local variable within the body of all nonstatic functions. ‘this’ pointer is a constant pointer that holds the memory address of the current object. ‘this’ pointer is not available in static member functions as static member functions can be called without any object (with class name).
For a class X, the type of this pointer is ‘X* const’. Also, if a member function of X is declared as const, then the type of this pointer is ‘const X *const’ (see )

Following are the situations where ‘this’ pointer is used:

1) When local variable’s name is same as member’s name

#include
using namespace std; /* local variable is same as a member's name */class Test{private: int x;public: void setX (int x) { // The 'this' pointer is used to retrieve the object's x // hidden by the local variable 'x' this->x = x; } void print() { cout << "x = " << x << endl; }}; int main(){ Test obj; int x = 20; obj.setX(x); obj.print(); return 0;}Output: x = 20

For constructors,  can also be used when parameter name is same as member’s name.


2) To return reference to the calling object

/* Reference to the calling object can be returned */Test& Test::func (){   // Some processing   return *this;}

When a reference to a local object is returned, the returned reference can be used to chain function calls on a single object.

#include
using namespace std; class Test{private: int x; int y;public: Test(int x = 0, int y = 0) { this->x = x; this->y = y; } Test &setX(int a) { x = a; return *this; } Test &setY(int b) { y = b; return *this; } void print() { cout << "x = " << x << " y = " << y << endl; }}; int main(){ Test obj1(5, 5); // Chained function calls. All calls modify the same object // as the same object is returned by reference obj1.setX(10).setY(20); obj1.print(); return 0;}Output:x = 10 y = 20

转载地址:http://crsgi.baihongyu.com/

你可能感兴趣的文章
【深入理解JVM】:解析与分派
查看>>
【深入理解JVM】:Java内存模型JMM
查看>>
【JDK】:Java容器框架
查看>>
【JDK】:HashMap详解
查看>>
【JDK】:java.lang.String、StringBuilder、StringBuffer 源码解析
查看>>
【JDK】:ArrayList和LinkedList源码解析
查看>>
【JDK】:ConcurrentHashMap高并发机制——【转载】
查看>>
nginx 运行与操作
查看>>
nginx 负载均衡
查看>>
js bootstrap 警告框的隐藏和显示
查看>>
centos 7.1安装docker
查看>>
docker 创建一个新镜像
查看>>
docker server gave HTTP response to HTTPS client 问题处理办法
查看>>
docker 导入与导出镜像
查看>>
docker 创建本地registry并push镜像
查看>>
docker 在push镜像到本地registry出现的500 Internal Server Error
查看>>
Linux磁盘空间查看及空间满的处理
查看>>
Linux下clock计时函数学习
查看>>
OpenMp多线程编程计时问题
查看>>
Linux/Unix 环境下实现精确计算程序运行的时间
查看>>