运算符重载与友元函数错误

时间:2011-05-14 15:08:52

标签: c++ operator-overloading

我正在编写一个向我介绍运算符重载的作业。我必须将一些二元运算符作为成员函数和朋友函数重载。我的成员函数重载“+”运算符工作正常但我的朋友函数重载“ - ”运算符似乎很难找到成员函数能够使用的数据。

class def:

class matrix
{
    friend ostream& operator << (ostream&, const matrix&);
    friend bool operator == (const matrix &, const matrix &);
    friend matrix operator - (const matrix &, const matrix &);

private:
    int size;
    int range;
    int array[10][10];

public:
    matrix(int);
    matrix(int, int);
    bool operator != (const matrix &) const;
    matrix operator + (const matrix &) const;
    const matrix & operator = (const matrix &);
};

“+”重载:

matrix matrix::operator + (const matrix & a) const
{
    matrix temp(size,range);

    for (int i = 0; i < a.size; i++)
        for (int j = 0; j < a.size; j++)
            temp.array[i][j] = a.array[i][j] + array[i][j];

    return temp;
} 

“ - ”过载:

matrix operator - (const matrix & a, const matrix & b)
{
    matrix temp(size, range);

    for (int i = 0; i < a.size; i++)
        for (int j = 0; j < a.size; j++)
            temp.array[i][j] = a.array[i][j] - array[i][j];

    return temp;
}

我在友元函数中得到的错误是大小,范围和数组都是未声明的。我很困惑,因为我认为成员和朋友函数都可以同等地访问类中的数据,而且我在两个函数中基本上都做同样的事情。有谁知道我的问题可能是什么?

2 个答案:

答案 0 :(得分:5)

朋友运营商不属于班级。因此,它不知道sizerange以及array。您必须使用对象ab。它应该是这样的:

matrix operator - (const matrix & a, const matrix & b)
{
   if(a.size != b.size)
      throw std::exception(...);

   matrix temp(a.size, a.range);

   for (int i = 0; i < a.size; i++)
                for (int j = 0; j < a.size; j++)
                     temp.array[i][j] = a.array[i][j] - b.array[i][j];

    return temp;
}

答案 1 :(得分:0)

虽然您的友元函数可以访问对象的私有数据,但这并不意味着属性属于该函数的范围。我的意思是,它不会像你期望的那样充当成员函数。您需要提供您传递的其中一个对象的大小。