Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法理解特定的代码片段:这是一个函数,只是一行还是什么?_C++_Cmake_Visual Studio Code - Fatal编程技术网

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

C++ 无法理解特定的代码片段:这是一个函数,只是一行还是什么?,c++,cmake,visual-studio-code,C++,Cmake,Visual Studio Code,及 我应该在一个类中为每一行创建函数。还有更多,但如果有人能解释一下他们是关于什么的,我相信我可以自己做剩下的 那么我的想法是什么?Vec2是我的类的名称,可能意味着这个操作符是这个类的对象。但同时这没有任何意义,因为有一个“+=”向我显示这是一条线,你基本上就是这样做的: Vec2 operator+(Vec2 const& u , Vec2 const& v); 但我想这可能是错误的。我的下一个猜测是这是一个函数,应该以{插入主体而不是这个}开始 第二个在我看来像是一个实数

我应该在一个类中为每一行创建函数。还有更多,但如果有人能解释一下他们是关于什么的,我相信我可以自己做剩下的

那么我的想法是什么?Vec2是我的类的名称,可能意味着这个操作符是这个类的对象。但同时这没有任何意义,因为有一个“+=”向我显示这是一条线,你基本上就是这样做的:

Vec2 operator+(Vec2 const& u , Vec2 const& v);
但我想这可能是错误的。我的下一个猜测是这是一个函数,应该以{插入主体而不是这个}开始

第二个在我看来像是一个实数函数,但为什么加号跟在运算符后面。这是否意味着这是一种命名函数的特殊方式,加号实际上没有任何意义


我希望有人能给我解释一下这是怎么回事。很抱歉,我有一个特殊的问题打扰你:/

这些确实是类
Vec2
的函数声明,用于声明该类可能的运算符(称为运算符重载)。如果定义它们,则可以在类上使用
+
+=
运算符,就像使用内置类型一样

Vec2& operator = Vec2& operator + Vec2 const& v
基本上可以重载几乎所有运算符。有关更多信息,请参阅:

这些确实是类
Vec2
的函数声明,用于声明该类可能的运算符(称为运算符重载)。如果定义它们,可以在类上使用
+
+=
运算符,就像使用内置类型一样

Vec2& operator = Vec2& operator + Vec2 const& v
基本上可以重载几乎所有运算符。有关更多信息,请参阅: 这些是函数声明,您的任务是实现这些定义

  • Vec2
    是类类型
  • operator+
    operator+=
运算符重载是,因为它们允许您键入
vec\u a+=vec\u b;
,其中
+=
是,编译器将其替换为调用
运算符+=

Vec2 a, b; // initialize somehow
Vec2 x = a + b;
x += b;
您可以在函数中执行任何操作,但惯例(以及最小意外原则)规定
+=
会导致
vec\u b
的内容附加到
vec\u a
的末尾

Vec2 vec_a;
Vec2 vec_b;
vec_a += vec_b; // the compiler calls vec_a.operator+=(vec_b)
您的任务是提供实现此期望的代码;也就是说,您需要编写代码,以便将表达式右侧的内容(
vec_b
在我的示例中)附加到表达式左侧内容的末尾(
vec_a

例如,假设
Vec2
具有以下数据成员:

Vec2 vec_a;
Vec2 vec_b;
vec_a += vec_b; // vec_a now contains its contents *and* vec_b's contents
然后,您将提供如下定义:

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
    是类类型
  • operator+
    operator+=
运算符重载是,因为它们允许您键入
vec\u a+=vec\u b;
,其中
+=
是,编译器将其替换为调用
运算符+=

Vec2 a, b; // initialize somehow
Vec2 x = a + b;
x += b;
您可以在函数中执行任何操作,但惯例(以及最小意外原则)规定
+=
会导致
vec\u b
的内容附加到
vec\u a
的末尾

Vec2 vec_a;
Vec2 vec_b;
vec_a += vec_b; // the compiler calls vec_a.operator+=(vec_b)
您的任务是提供实现此期望的代码;也就是说,您需要编写代码,以便将表达式右侧的内容(
vec_b
在我的示例中)附加到表达式左侧内容的末尾(
vec_a

例如,假设
Vec2
具有以下数据成员:

Vec2 vec_a;
Vec2 vec_b;
vec_a += vec_b; // vec_a now contains its contents *and* vec_b's contents
然后,您将提供如下定义:

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

实际的实现,我留给你作为练习

这是一个运算符函数的定义。C++不知道你的类型,如果你想用一个数学运算符,它也不知道该怎么处理你的TIPS。 这一行:

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”类型,有一个数学“+”,因此可以使用

Vec2 operator+(Vec2 const& u , Vec2 const& v);
省略错误。
另外,请看一下

这是一个运算符函数的定义。C++不知道你的类型,如果你想用一个数学运算符,它也不知道该如何处理你的TIPS。 这一行:

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”类型,有一个数学“+”,因此可以使用

Vec2 operator+(Vec2 const& u , Vec2 const& v);
省略错误。
另外,请看一看

你知道那些应该是什么吗?你知道什么是运算符以及重载意味着什么吗?你可以看一下你知道那些应该是什么吗?你知道什么是运算符以及重载意味着什么吗?你可以看一下u是第一个参数的名称(数学方程的左侧)v是数学方程的右侧,u是第一个参数的名称(数学方程的左侧),v是数学方程的右侧。