c++ this指针详细介绍
2018-01-19 14:24
204 查看
一、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指针详细介绍
- android 自定义控件 自定义属性详细介绍
- QT中PRO文件写法的详细介绍,很有用,很重要!
- 关于Java Socket编程的详细介绍
- php正则表达式使用的详细介绍
- 图解CSS的padding,margin,border属性(详细介绍及举例说明)
- iptables的详细介绍及配置方法 推荐
- Java Volatile详细介绍
- 硬盘MBR详细介绍[转载自CSDN] [此博文包含图片]
- Raid磁盘阵列技术详细介绍
- OpenLDAP中 Schema的详细介绍
- Xen事件通道详细介绍(四)
- RabbitMQ基础概念详细介绍
- linux目录结构详细介绍
- Linux下安装与使用MySQL详细介绍
- Java开源的混淆器:Proguard详细介绍
- Java各种数据类型详细介绍及其int与Integer的区别
- Struts2中包的详细介绍
- TCP/IP五层的详细介绍
- 详细介绍jQuery淡入淡出元素的方法