旅游网的网站建设,秦皇岛营销式网站制作,wordpress天气接口,统一身份认证平台#x1f436;博主主页#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️#x1f525;专栏系列#xff1a;线性代数#xff0c;C初学者入门训练#xff0c;题解C#xff0c;C的使用文章 #x1f525;座右铭#xff1a;“不要等到什么都没有了#xff0c;才下定决心去做” #x1… 博主主页ᰔᩚ. 一怀明月ꦿ ❤️专栏系列线性代数C初学者入门训练题解CC的使用文章 座右铭“不要等到什么都没有了才下定决心去做” 大家觉不错的话就恳求大家点点关注点点小爱心指点指点 目录 this 指针
this指针的定义
this指针的应用
this指针的注意事项 this 指针 this指针的定义 c为类的对象分配内存空间时只为对象的数据成员分配内存空间而将对象的成员函数放在另外一个公共区域同一个类的多个对象共享它们的成员函数。那么同一个类的多个对象的成员函数在访问对象的数据成员时怎么确保访问的是正确的数据成员呢例如声明的长方体类Box定义了两个对象box1和box2对于调用“box1.volume()”应该box1中的heightwidth和length计算长方体box1的体积对于“box2.volume()”应该box2中的heightwidth和length计算长方体box1的体积。现在box1和box2调用的都是同一段代码系统是怎么区分应该访问box1的数据成员还是box2的数据成员呢 其实在每一个成员函数中都包含了一个特殊的指针这个指针的名字是固定的称为this指针。this指针是指向本类对象的指针它的指向是被调用成员函数所在的对象即调用哪个对象的该成员函数this指针就指向哪个对象。在成员函数内部访问数据成员的前面隐藏着this指针。如前面前面提到的Box类中的volume函数其中的height*width*length实际等价于(this-height)*(this-width)*(this*length)。如果调用box1对象的volume函数则this指针就指向对象box1所以(this-height)*(this-width)*(this*length)就相当于(box1.height)*(box1.width)*(b ox1.length)这样就是计算的box1的体积。 this指针的应用 this指针是由系统通过参数隐式传递给成员函数的。如下列成员函数volume的定义 float Box::volume()
{return height*width*length;
} c系统隐式处理为 float Box::volume(Box* this)
{return (this-height)*(this-width)*(this*length);
} 在函数形参表中增加一个this指针而在调用时隐藏增加一个实参 box1.volume(box1); 需要注意的是以上是帮助理解this指针的作用和它的工作原理这些操作都是系统自动完成的在使用时不需要再数据成员前面加上this指针更不用调用的时候写出调用成员函数对象的地址作为实参。 有时候我们也会显示使用this指针例如 Box的构造函数box数据成员为length, width, weight
Box::box(float length, float width, float weight)
{lengthlength;widthwidth;weightwight;
} 这样构造函数的定义系统就分不清哪个length是数据成员哪个length是形参因为他们的名字一样 修改为 Box::box(float length, float width, float weight)
{this-lengthlength;this-widthwidth;this-weightwight;
} 这样系统就可以分清’‘左边的是数据成员’‘右边的是形参 this指针的注意事项 this指针并不是创建对象的一部分this指针的类型取决于使用this指针的成员函数类型以及对象类型。 this指针不能再静态函数中使用 this指针在成员函数的开始执行前构造的在成员函数的执行结束后清除。 创建一个对象后不能通过对象使用this指针。也无法知道一个对象的this指针的位置在成员函数里你可以知道this指针的位置通过this也可以直接使用的。 如果大家还有不懂或者建议都可以发在评论区我们共同探讨共同学习共同进步。谢谢大家