C++ 如何将常量函数与“一起使用?”;这";
我有一个常量函数,需要返回三角形的面积,我找到了一个公式,适用于所有类型的三角形。C++ 如何将常量函数与“一起使用?”;这";,c++,constants,C++,Constants,我有一个常量函数,需要返回三角形的面积,我找到了一个公式,适用于所有类型的三角形。 \u点是一个std::vector,它包含带有x和y参数的二维点。 我有一个distance()函数,它给出两点之间的距离 我不知道如何以另一种方式获得三角形的面积,函数必须是const,visual studio在每行中标记第一个“this”,这给了我一个问题: double Triangle::area() const { double a = this->_points.at(0).dista
\u点
是一个std::vector
,它包含带有x
和y
参数的二维点。我有一个
distance()
函数,它给出两点之间的距离
我不知道如何以另一种方式获得三角形的面积,函数必须是const,visual studio在每行中标记第一个“this”,这给了我一个问题:
double Triangle::area() const
{
double a = this->_points.at(0).distance(this->_points.at(1));
double b = this->_points.at(1).distance(this->_points.at(2));
double c = this->_points.at(2).distance(this->_points.at(0));
return ((sqrt((a + b + c)*(a + b - c)*(a - b + c)*(-a + b + c))) / (2*c));
}
Point
是具有distance()
函数和x
和y
声明的类,用于澄清注释
“distance函数不是常量,但它获取一个(常量和点)作为参数”
从向量成员变量访问的点
值必须在出现在const
成员函数内的代码中考虑const
const Triangle *const this
Error: the object has type qualifiers that are not compatible with the member function
object type is: const Point
请参见std::vector::at()
中的第二个签名,这个签名实际上是在area()函数中调用的
这最后要求点
类需要声明
this->_points.at(1).distance(this->_points.at(2));
// ^^^^^^^^^^^^^
可以从double Triangle::area()const
成员函数调用的成员签名
我假设您的Point::distance()
函数不会以任何方式更改Point
实例,因此只要将const
适当地添加到签名中就可以了
“我不知道如何以另一种方式获得三角形的面积,函数必须是const,visual studio在每行中标记第一个“this”,这就给了我这个问题:”
const三角形*const此
更深入地解释一下:
此
指针将被计算为
三角形*常量
在非常量
成员函数中
const三角形*const
用于const
成员函数
第一个表单允许修改三角形的数据成员
第二个表单否认这一点,除非相关数据成员被标记为mutable
这两种形式(出现在*
之后的常量)都拒绝您可以修改此
指针本身(例如,尝试类似此=新三角形();
)也许您的点::距离
函数不是常量
。此->运算符用于引用在类的私有部分中定位/初始化的变量/函数。@Bot,您的语句不仅不相关,而且也不正确。lol@Bot“…参考类的私有部分中的变量/函数”这是胡说八道!距离函数不是常数,但它得到一个(常数&点)作为参数
double distance(const Point& pt) const;
// ^^^^^