c++ - 为什么类成员函数不能接受多个与其类相同类型的参数

标签 c++ class function arguments member-functions

前几天,当我试图使用类成员函数重载一个双参数运算符时遇到了麻烦。我试过引用,但没有任何改变。编译器说我不能编写一个成员函数,它接受一个以上与类本身相同类型的参数。这是为什么?

代码如下:

class Fraction
{
public:
  Fraction(int num=1, int den=1): numerator(num), denominator(den) {}
  Fraction(const Fraction& r): numerator(r.numerator), denominator(r.denominator) {}
  Fraction& operator=(const Fraction&);
  Fraction& operator*(const Fraction&, const Fraction&);
private:
  int numerator, denominator;
};

Fraction& Fraction::operator=(const Fraction& r)
{
  numerator = r.numerator;
  denominator = r.denominator;
  return *this;
}

Fraction Fraction::operator*(const Fraction& x, const Fraction& y)
{
  Fraction z(x.numerator*y.numerator, x.denominator*y.denominator);
  return z;
}

以下是编译器的错误信息:

Fraction& Fraction::operator*(const Fraction&, const Fraction&)' 必须接受零个或一个参数

最佳答案

运算符采用固定数量的参数,例如 operator+,因为加法运算符正好采用 2 个参数。如果它是一个成员函数,则第一个(最左边的)隐含为 this,第二个作为参数传递。

调用带有三个参数的 operator+ 会是什么样子?人们可能会想象它看起来像 3 + 4 + 5 但这相当于调用 operator+(3,4) 然后是 operator+(7,5)。

有关运算符列表以及它们有多少个参数,请查看维基百科:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

有关更多详细信息,还有另一篇 StackOverflow 帖子非常详细:Operator overloading

关于c++ - 为什么类成员函数不能接受多个与其类相同类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946229/

相关文章:

c++ - 全局新运算符重载

c++ - 在多线程应用程序中使用 OpenSSL

c++ - 为什么下面的代码段返回指针所指向的值而不是指针的地址?

ios - Swift 类指针作为?类协议(protocol)?

实例化时使用 new 关键字的 C++ 指针和引用

c - c语言怎么求数组的长度?

javascript - 在一定高度上执行 Javascript 函数

c++ - 检查 CString 是否包含特定的文本 MFC

Java : Duplication of methods

javascript - 如果找不到 div 中的类,是否先插入一个 div?