c++ - 从友元函数中的对象访问成员函数

标签 c++ object operator-overloading constants friend-function

下面的代码是 Distance 类的一部分。运算符重载是声明为 Distance 类的私有(private)成员的友元函数,而我尝试调用的函数是公共(public)成员。该函数不改变Distance类的成员变量。

我试图保持两个按引用调用对象 d1 和 d2 不变,但我的编译器说我通过调用 ConvertToInches 函数或位于距离类内的任何函数违反了它们的 const 属性,尽管这些函数不是更改 Distance 类中的私有(private)变量。

当我不使 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;
}

最佳答案

问题是 ConvertToInches 方法未声明为 const,而您正试图在 const Distance& 对象上调用方法。一个简单的解决方法是将 const 添加到函数的声明和定义中:

class Distance
{
public:
    int ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches) const;
};

int Distance::ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches) const { /* ... */ }

您的代码片段还有一个小问题:d2 不是像 d1 那样的 const 引用。

关于c++ - 从友元函数中的对象访问成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198335/

相关文章:

javascript - 将子数组添加到 Javascript 中的对象中

javascript - AngularJS:将对象存储在 cookie 中,给出 [Object Object] 的结果

c++ - 为哈希表获取和设置正确重载 [bracket] 运算符

c++ - 为另一个类中的类型重载 <<

c++ - 重载时 operator+= 的返回类型

c++ - Qt - 如何在特定浏览器中打开网站

c++ - 类问题(c++ 和序言)

c++ - 通过范围循环从指针容器中获取取消引用元素的引用

c++ - 我应该写 `0x0` 还是 `0` 而不是 NULL?

javascript - 使用作为单引号字符串传递的值解析 JSON 对象