我们可以在非对象上使用运算符重载吗?例如,添加两个vector<int>
。或者我是否需要创建一个具有vector<int>
的类,然后重载+
运算符。
另外,我想知道在二元运算符中是否可以有2种不同类型的操作数。如果是,怎么样?
答案 0 :(得分:2)
我们可以在非对象上使用运算符重载吗?
运算符本质上是作为函数实现的,可以接受与函数类似的类型范围。
有一个few restrictions,特别是受到以下事实的限制:至少有一个参数必须是class
或enum
(用户或库类型)。
此外,有一些运算符必须作为成员函数实现,因此它们将与一个类相关联,但许多可以在类之外声明和定义。
参数的确切数量由正在实施的运算符决定。一元运算符接受1个参数,二元运算符接受2个参数。
通常,建议是提供类似于canonical forms的行为,但语言本身不会将您的实现限制为仅仅是这种行为。
另外,我想知道在二元运算符中是否可以有2种不同类型的操作数。如果是,怎么样?
是。同样,就像函数一样。
答案 1 :(得分:1)
我们可以在非对象上使用运算符重载吗?例如,添加两个向量。
我认为你想问一下是否可以在类定义之外使用运算符重载 。是的,这绝对是可能的,正如其他人在这里所说的那样。这是一个为自定义'MyClass'类型重载'+'运算符的简单示例:
MyClass operator+(const MyClass& a, const MyClass& b)
{
return MyClass(a.value + b.value);
}
但是,std::vector
没有算术运算符的重载是有原因的,因为结果是不明确的。你想要'+'将两个向量链接在一起还是应该添加组件?你如何处理大小不同的载体?通常,STL的容器为这些目的提供了特殊的方法,并且在不清楚时不依赖于操作员,因此请确保您已经检查了specification of std::vectors
您可以根据自己的需要自由地实现此类运算符,尤其是使用自己的类型,但是您可能会产生不直观的行为,最终导致错误的代码。在std::vector
的情况下,最好编写一个具有描述性名称的函数,该函数以您希望的方式在std::vector
上运行:
std::vector<int> addComponents(const std::vector<int>& a, const std::vector<int>& b);
答案 2 :(得分:-1)
我们可以在非对象上使用运算符重载吗?例如,添加两个向量[?]
您的问题的前提已被破坏,因为 a vector<int>
是一个对象。
超载你喜欢的一切。
另外,我想知道在二元运算符中是否可以有2种不同类型的操作数。
试试吧。
如果是,怎么样?
输入。