浅析this指针
来源:互联网 发布:矩阵相加 编辑:程序博客网 时间:2024/05/29 10:15
要说this指针,那我们先来引出this指针,为什么会有this指针?this指针到底是做什么的?
我们先来看个例子:
那么了解了this指针,那么到底this指针怎么使用的呢?
用上面的代码举一个例子
那么其实C++在处理的时候会将它变成一下代码:
那么其实就是在move函数形参列表中多了一个this指针。那么调用的时候,其实使用这种方式调用的。
a.move(&a);
那么其实就是将a的地址传给this,然后按照this的指向再去引用其他成员。
那么说完了this指针 我们来简单总结一下this指针的特性
1. this指针的类型是 类类型*const
2. this指针并不是对象本身的一部分,它不影响sizeof的结果。
3. this的作用域在类成员函数的内部。
4. this指针是类成员函数的第一个默认隐含参数,编译器会自动传递。
我深入调查了一下发现 当有this指针的时候 c++还没有引用机制 所以this指针这一叫法也就沿用至今了
最后 在笔者查询资料的时候 发现了几个写的比较好问题 特此截图分享给大家
我们先来看个例子:
class Screen { public: // 成员函数 private: string _screen; mutable string::size_type _cursor; // mutable 成员 short _height; short _width;};
Screen类有_screen, _height, _width 和_cursor 数据成员,那么我们将它实例化。
int main() { Screen myScreen( 3, 3 ), bufScreen; myScreen.clear(); myScreen.move( 2, 2 ); myScreen.set( '*' ); myScreen.display(); bufScreen.reSize( 5, 5 ); bufScreen.display();}
void Screen::move( int r, int c ){ if ( checkRange( r, c ) ) // 无效位置? { int row = (r-1) * _width; // 行位置 _cursor = row + c - 1; }}
我们实例化出两个对象,myScreen以及 bufScreen。
如果调用myScreen实例化对象的函数move(),那么我们可以用到myScreen中的对象成员,
如果调用bufScreen对象的函数move(),我们可以用到bufScreen的对象成员。
那么move中的成员_cursor怎样被依次绑定到属于 myScreen 和bufScreen 的数据成员上呢?
这时 我们就需要this指针
每个类成员函数都含有一个指向被调用对象的指针 这个指针被称为this
在非const成员函数中 它的类型是指向该类类型的指针
在const 成员函数中是指向const类类型的指针
而在volatile成员函数中 是指向volatile类类型的指针
例如 在类Screen的成员函数 move()中this指针的类型是Screen*
在类List的非const成员函数中 this指针的类型是List*那么了解了this指针,那么到底this指针怎么使用的呢?
用上面的代码举一个例子
void Screen::move( int r, int c ){ if ( checkRange( r, c ) ) // 无效位置? { int row = (r-1) * _width; // 行位置 _cursor = row + c - 1; }}
那么其实C++在处理的时候会将它变成一下代码:
void Screen::move(Screen* this, int r, int c ){ if ( checkRange( r, c ) ) // 无效位置? { int row = (r-1) * _width; // 行位置 this->_cursor = row + c - 1; }}
那么其实就是在move函数形参列表中多了一个this指针。那么调用的时候,其实使用这种方式调用的。
a.move(&a);
那么其实就是将a的地址传给this,然后按照this的指向再去引用其他成员。
那么说完了this指针 我们来简单总结一下this指针的特性
1. this指针的类型是 类类型*const
2. this指针并不是对象本身的一部分,它不影响sizeof的结果。
3. this的作用域在类成员函数的内部。
4. this指针是类成员函数的第一个默认隐含参数,编译器会自动传递。
我深入调查了一下发现 当有this指针的时候 c++还没有引用机制 所以this指针这一叫法也就沿用至今了
最后 在笔者查询资料的时候 发现了几个写的比较好问题 特此截图分享给大家
1 0
- 浅析 C++ this指针
- 浅析 this指针
- C++ this 指针 浅析
- C++ this 指针 浅析
- 浅析this指针
- 浅析this指针
- 浅析this指针(c++)
- C++浅析this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 关于封包工具一上午的研究总结
- Git Merge
- Collection之List方法和分类
- 模板学习笔记2
- 解读 RtlConvertNtFilePathToWin32FilePath
- 浅析this指针
- C++11 (二)
- nginx配置笔记
- 如何安装SQL Server 2008数据库(带完整图解)
- Struts2中的拦截器interceptor
- openlayers3.14源码学习(1)
- 2python机器学习--SVM(决策树分类算法)
- Hash Function 哈希函数
- 大鱼后传