【发布时间】:2014-10-05 00:00:45
【问题描述】:
下面的代码是距离类的一部分。运算符重载是一个友元函数,声明为 Distance 类的私有成员,而我尝试调用的函数是公共成员。该函数不会改变 Distance 类的成员变量。
我试图保持两个引用调用对象 d1 和 d2 不变,但我的编译器说我通过调用 ConvertToInches 函数或位于距离类中的任何函数违反了它们的 const 属性,尽管这些函数没有更改 Distance 类中的私有变量。
当我不使d1和d2为常数时,编译器没有问题。
谁能解释在调用此函数时如何使 d1 和 d2 保持不变以及为什么我所拥有的不起作用?
谢谢!
const Distance operator+(const Distance& d1, const Distance d2)
//this is a friend function
//declared in private section of Distance class
{
//this function is what causes problems !!!!!!!
d1.ConvertToInches(1, 2, 3, 4);
Distance d3 = 3;
return d3;
}
Distance::ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches)
//declared in public section of Distance class
{
cMiles = cMiles * 63360;
cYards = cYards *36;
cFeet = cFeet * 12;
int cSum = cMiles + cYards + cFeet + cInches;
return cSum;
}
【问题讨论】:
-
我不知道为什么@CIsForCoocckies 删除了答案:根据您对
ConvertToInches的声明,它是一个非常量成员函数。这些可能不会在const对象上调用,例如朋友operator+的参数。 -
或者,
ConvertToInches是static成员函数吗? (从您显示的 sn-p 中不清楚)无论如何,如果它不访问Distance的任何数据成员或私有成员,那么它没有理由应该是成员函数,静态或非静态。
标签: c++ object operator-overloading constants friend-function