无法理解代码的特定片段:这是一个函数,只是一行还是什么

Can not understand a specific fragment of code: Is this a function, just a line or what?

本文关键字:函数 一个 是什么 一行 片段 代码      更新时间:2023-10-16
Vec2& operator+=(Vec2 const& v);

Vec2 operator+(Vec2 const& u , Vec2 const& v);

im应该为每个行中的每条线创建功能。还有更多,但是如果有人可以向我解释他们的意思,我确定我可以自己做剩下的事情。

那么我的想法是什么?VEC2是我班级的名称,这可能意味着该操作员是此类的对象。但是与此同时,这没有任何意义,因为有这样的" ="向我表明这是一条基本上只是这样做的行:

Vec2& operator = Vec2& operator + Vec2 const& v

,但我想这可能是错误的。我的下一个猜测是,这是一个函数,应该从{插入身体而不是此开始。

第二个看上去像是真实的功能,但是为什么要跟随操作员。这是否意味着这是一种命名功能的特殊方法,而加号实际上并不意味着什么?

我希望有人可以向我解释这是关于什么的。很抱歉为您解决这样的特定问题打扰您:/

这些是函数声明,您的任务是实现定义。

  • Vec2是类类型。
  • operator+operator+=运算符过载

操作员的过载是句法糖,因为它们允许您键入vec_a += vec_b;+=的位置,编译器将其替换为operator+=的调用。

Vec2 vec_a;
Vec2 vec_b;
vec_a += vec_b; // the compiler calls vec_a.operator+=(vec_b)

您可以在功能中执行任何操作,但是惯例(和原理最令人惊讶(决定+=导致vec_b的内容附加到vec_a的末尾。

Vec2 vec_a;
Vec2 vec_b;
vec_a += vec_b; // vec_a now contains its contents *and* vec_b's contents

您的任务是提供将达到这一期望的代码;也就是说,您需要编写代码,以便表达式的右侧内容(我的示例中的 vec_b(附加 在表达式的左侧内容的末端(在我的示例中vec_a(。

作为一个例子,假设Vec2具有以下数据成员:

int* data;      // a pointer to array of ints, "capacity" long
int  capacity;  // the length of the array of ints
int  size;      // the number of ints stored in data

然后,您将提供以下定义:

Vec2& Vec2::operator+=(Vec2 const& v)
{
    int required_capacity = size + v.size;
    if (required_capacity > capacity)
    {
        // create a temp array required_capacity long
        // copy contents of data into temp array
        // assign data so it points to temp
        // assign capacity to required_capacity
    }
    // copy v.size elements from v.data to data[size]
    // increment size by v.size
    return *this;
}

我作为练习留给您的实际实施

这些确实是类Vec2的功能声明,该声明用于声明此类可能的运算符(称为Operator Overloading(。如果定义它们,则可以在类上使用++=操作员,就像使用内置类型一样。

Vec2 a, b; // initialize somehow
Vec2 x = a + b;
x += b;

您基本上可以超载几乎所有操作员。有关更多信息,请参见:http://en.cppreference.com/w/cpp/language/operators

这是操作员函数的定义。C 不知道您的类型,如果您想在其上使用数学运算符,它也不知道该如何处理小费。

这一行:

Vec2 operator+(Vec2 const& u , Vec2 const& v);

声明您的" vec2"类型,有一个数学' ',因此您可以使用

 Vec2 v = yourVector + yourVector2

whitout错误。另外,请在这里看

相关文章: