c++ this指针详细介绍
2018-01-19 14:24
162 查看
一、this指针的知识:
每个对象通过this指针来访问自己的地址。this指针并不是对象的一部分,this指针所占
的内存大小是不会反应在sizeof操作符里。this指针的类型取决于使用(this指向的)对
象类型。
二、为什么静态方法里没有this指针?
静态方法和静态变量一样,它不属于某个对象,是所有对象共享的成员,可以说
他是属于类的。而this指针是指向具体的某个对象的。所以静态方法里不含有this指针。
三、this指针什么时候创建的?
this在成员函数的开始执行前赋值,在成员函数执行结束后清除。
实际上编译器是这样实现this指针的:
1.改变类成员函数的定义,用附加参数this指针来确定具体的对象。如:
void Cgoods::RegisterGoods(Cgoods*this,char*nam,int amount,float price)
{
strcpy(this->Name,name);this->Amount=amount;
this->price=price;
}
2.每个类成员函数的调用,加上一个附加的实参——被调用对象的地址。如:
Car1.RegisterGoods ( String , number , pr );
改变为:
RegisterGoods ( &Car1 , String , number , pr);
编译器会在每个非静态的成员函数里加上一个this指针,当某个对象调用成员时,this指
针会指向该对象地址。在成员函数执行完后清除,只是清除栈空间。
每个对象通过this指针来访问自己的地址。this指针并不是对象的一部分,this指针所占
的内存大小是不会反应在sizeof操作符里。this指针的类型取决于使用(this指向的)对
象类型。
二、为什么静态方法里没有this指针?
静态方法和静态变量一样,它不属于某个对象,是所有对象共享的成员,可以说
他是属于类的。而this指针是指向具体的某个对象的。所以静态方法里不含有this指针。
三、this指针什么时候创建的?
this在成员函数的开始执行前赋值,在成员函数执行结束后清除。
实际上编译器是这样实现this指针的:
1.改变类成员函数的定义,用附加参数this指针来确定具体的对象。如:
void Cgoods::RegisterGoods(Cgoods*this,char*nam,int amount,float price)
{
strcpy(this->Name,name);this->Amount=amount;
this->price=price;
}
2.每个类成员函数的调用,加上一个附加的实参——被调用对象的地址。如:
Car1.RegisterGoods ( String , number , pr );
改变为:
RegisterGoods ( &Car1 , String , number , pr);
编译器会在每个非静态的成员函数里加上一个this指针,当某个对象调用成员时,this指
针会指向该对象地址。在成员函数执行完后清除,只是清除栈空间。
相关文章推荐
- c++ this指针详细介绍
- ecshop函数大全,ecshop函数详细介绍!
- linux高级工具命令(七)netstat详细介绍
- js中string对象详细介绍
- Ubuntu下安装wine详细介绍
- 详细的北京安卓培训班课程内容介绍
- MYSQL数据类型详细介绍
- 杀毒辅助工具冰刃IceSword详细介绍
- PHP之APC缓存详细介绍(转)
- linux下的快捷键详细介绍
- printf 字符串格式化的详细介绍 -留个脚印以免忘记
- 血液检测的性质需要血液分析仪为我们详细介绍
- 详细介绍Linux finger命令的使用
- 第八天- linux目录结构详细介绍
- 详细介绍C++ STL编程
- Spring AOP中定义切点的详细介绍
- greenDao的详细介绍
- 关于php存储cookie时path存放路径放的详细介绍
- RAID级别详细介绍