西安做网站的在哪,全国监理工程师查询网,安阳县陈佳,网站注销主体填写原因归纳编程学习的感悟#xff0c; 记录奋斗路上的点滴#xff0c; 希望能帮到一样刻苦的你#xff01; 如有不足欢迎指正#xff01; 共同学习交流#xff01; #x1f30e;欢迎各位→点赞 #x1f44d; 收藏⭐ 留言#x1f4dd; 人生就像骑单车#xff0c;想保持平衡…
归纳编程学习的感悟 记录奋斗路上的点滴 希望能帮到一样刻苦的你 如有不足欢迎指正 共同学习交流 欢迎各位→点赞 收藏⭐ 留言 人生就像骑单车想保持平衡就得往前进
一起加油 目录
一、隐含的this指针
二、this指针讲解
三、说明 四、注意
五、共勉 一、隐含的this指针
#includeiostream
#define PI 3.1415926
using namespace std;
class circle{private:int r;public:circle(int pr):r(pr){}double getarea();
};double circle::getarea(){return PI*r*r;
}int main(){circle cir1(5);circle cir2(10);circle cir3(15);cout半径为5的圆的面积为cir1.getarea()endl;cout半径为10的圆的面积为cir2.getarea()endl;cout半径为15的圆的面积为cir3.getarea()endl;return 0;
} 二、this指针讲解 类的每个对象中都拥有数据成员的存储空间。上面的例题中定义了三个对象因此有三个同样大小的空间存放三个对象的数据成员。但是cir1、cir2 和 cir3 在调用函数 getarea时都调用同一段函数代码段。 当不同对象的成员函数引用数据成员时如何保证引用的是指定对象的数据成员呢? 对于cir1.getarea应该是引用对象 cir1 中的r来计算圆 cir1的面积;而对于 cir2.getarea( )来说则应该是引用对象 cir2 中r来计算出圆 cir2 的面积。现在 ciri 和 cir2 调用的是同一个函数段,系统应该怎样使函数分别引用 cirl 和 cir2 中的数据成员? 通过 this 指针可以解决这个问题在每一个成员函数中都包含一个特殊的指针称为 this 指针。它是指向本类对象的指针。this 指针是一个特殊的隐含指针它隐含在每一个类的非静态成员函数中(包括构造函数和析构函数)即类的每个非静态成员函数都有一个 this 指针指向调用这个成员函数的对象。当一个对象调用成员函数时编译系统先将对象的首地址赋给 this 指针然后调用成员函数。在成员函数存取数据成员时隐含地使用 this 指针这样成员函数就能够通过 this 指针来访问目的对象的数据成员。 例如当 cir1 调用成员函数 getarea 时编译系统把对象 cirl 的起始地址赋给 this 指针。因此在成员函数引用数据成员时就按照 this 的指向找到对象 cirl 的数据成员。例如 getarea 数要计算 PI*r*r 的值实际上是执行以下语句:
PI*this-r*this-r;
由于当前 this 指向 cir1因此相当于执行以下语句:
PI*cir1.r*cir1.r;
这样就计算出圆 cir1 的面积。 同样地如果 cir2 调用成员函数 getarea编译系统就把对象 cir2 的起始地址赋给成员函这样就计算出圆 cir1 的面积。getarea 的 this 指针计算出来的结果就是 cir2 的面积。this 指针是隐式使用的它是作为参数被传递给成员函数的。 成员函数 getarea 的定义如下:
double circle::getarea(){return PI*r*r;
}
C编译后把它处理为:
double circle::getarea(circle *this){return PI*this-r*this-r;
}
即在成员函数的形参表列中增加一个 this 指针。
在调用该成员函数时实际上是用以下方式调用的:
cirl.getarea(cir1);
将对象 cir1的地址传递给形参 this 指针。然后按 this 的指向去引用对象的成员。
三、说明 上述的这些过程都是编译系统自动实现的程序设计者不必人为地在形参中增加this 指针也不必将对象a 的地址传给 this 指针。同时在需要时也可以显式地使用 this指针。
例如在 circle 类的 getarea 函数中下面两种表示方法都是合法并且相互等价的。
return (PI * r *r); //隐含使用 this 指针
return (PI * this-r * this-r);//显式使用 this 指针 四、注意 可以用*this 表示被调用的成员函数所在的对象,*this 就是 this 所指向的对象,即当前的对象上面的 return 语句也可写成:
return(PI*(*this).r * (*this).r);
*this 两侧的括号不能省略不能写成*this.r
五、共勉 以上就是我对类和对象——(6)友元的理解希望本篇文章对你有所帮助也希望可以支持支持博主后续博主也会定期更新学习记录记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴请在评论区说出来哦同时我还会继续更新对类和对象的理解请持续关注我哦