无法理解代码的特定片段:这是一个函数,只是一行还是什么
Can not understand a specific fragment of code: Is this a function, just a line or what?
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错误。另外,请在这里看
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用