这种加法有什么问题?

What's wrong with this addition method?

本文关键字:什么 问题      更新时间:2023-10-16

这是Vector类的公共继承中方法的声明:

Vector Addition(Vector a, Vector b);

这里是类外的实现:

Vector Vector::Addition(Vector a, Vector b)
{
    Vector temp = *this;
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;
}

当我在主要功能中这样做时:

Vector c(0,0),a(0,0),b(0,0);
c=Addition(a,b);

我得到错误:标识符"Addition"未定义。请帮忙!

c=Addition(a,b);

告诉编译器调用一个函数独立函数。您提供了一个成员函数,而不是一个独立函数,因此编译器找不到任何成员函数,它会抱怨。

您需要提供独立功能。

由于Addition函数是Vector的成员,因此必须这样调用它:

c = Vector::Addition(a, b);

c = a.Addition(b);

请注意,第一个要求Addition函数为静态,这意味着它不在具体实例(函数体中的this(上操作:

static Vector Addition(Vector a, Vector b);

但是,您不能访问this指针,因此您必须默认构造temp,而不是获取副本(顺便说一句,由于您无论如何都要覆盖xy,因此未使用副本(。

第二个使用左手边的操作数作为实现中的this指针(签名中没有a(。

Vector Addition(Vector b)
{
    Vector temp = *this;
    temp.x += b.x;
    temp.y += b.y;
    return temp;
}

请注意,您也可以在C++中重载运算符。为此,定义一个名为operator+的非静态成员函数,该函数采用第二个实例(第一个实例是函数内的this指针,该指针将是左侧操作数(:

Vector operator+(const Vector &other) const;

实施(一种可能性(:

Vector Vector::operator+(const Vector &other)
{
    Vector temp = *this;
    temp.x += other.x;
    temp.y += other.y;
    return temp;
}

您在Vector中声明了Addition。正确的方法是。。。

(1( 将加法作为全局函数。这将涉及到从Vector类中取出加法的定义。因此,它看起来像

Vector Addition(/*parameters*/) { /* implementation */ }

(2( 使用static关键字使Addition为static,并使用代码c = Vector::Addition(a, b)调用它。

代码看起来像

 class Vector{
 static Vector Addition(/* arguments */);
}
Vector Vector::Addition(/*arguments*/) {/*implementation*/}