C++ 在没有类的情况下重载运算符

C++ 在没有类的情况下重载运算符,c++,operator-overloading,C++,Operator Overloading,我们可以在非对象上使用运算符重载吗?e、 g加两个向量。或者我需要创建一个有向量的类,然后重载+运算符 另外,我想知道在一个二进制运算符中是否可能有两种不同类型的操作数。如果是,如何进行 我们可以在非对象上使用运算符重载吗?e、 g加两个向量[?] 你的问题的前提被打破了,因为向量是一个对象 超负荷你喜欢的 另外,我想知道在一个二进制运算符中是否可能有两种不同类型的操作数 试试看 如果是,如何进行 通过打字 我们可以在非对象上使用运算符重载吗 操作符本质上是作为函数实现的,可以接受与函数类似的类

我们可以在非对象上使用运算符重载吗?e、 g加两个向量。或者我需要创建一个有向量的类,然后重载+运算符

另外,我想知道在一个二进制运算符中是否可能有两种不同类型的操作数。如果是,如何进行

我们可以在非对象上使用运算符重载吗?e、 g加两个向量[?]

你的问题的前提被打破了,因为向量是一个对象

超负荷你喜欢的

另外,我想知道在一个二进制运算符中是否可能有两种不同类型的操作数

试试看

如果是,如何进行

通过打字

我们可以在非对象上使用运算符重载吗

操作符本质上是作为函数实现的,可以接受与函数类似的类型范围

特别是,存在一个限制,即至少有一个参数必须是类或枚举用户或库类型

此外,有些运算符必须作为成员函数实现,因此它们将与类关联,但许多运算符可以在类之外声明和定义

参数的确切数目由正在实现的运算符确定。一元运算符接受1个参数,二元运算符接受2个参数

一般来说,建议提供类似的行为,但语言本身并没有将您的实现限制为该行为

另外,我想知道在一个二进制运算符中是否可能有两种不同类型的操作数。如果是,如何进行

对。同样,就像函数一样。

我们可以在非对象上使用运算符重载吗?e、 g加两个向量。 我想您的意思是询问是否可以在类定义之外使用运算符重载。是的,这里的其他人已经说过,这是完全可能的。下面是一个为自定义“MyClass”类型重载“+”运算符的简单示例:

MyClass operator+(const MyClass& a, const MyClass& b)
{
    return MyClass(a.value + b.value);
}
然而,std::vector没有算术运算符的重载是有原因的,因为结果是不明确的。您希望“+”将两个向量链接在一起,还是应该添加组件?如何处理大小不同的向量?通常,STL的容器为这些目的提供了特殊的方法,并且在不清楚的情况下不依赖于运算符,所以请确保您已经检查了

您可以自由地实现您认为合适的操作符,特别是对您自己的类型,但您可能会创建不直观的行为,并最终导致糟糕的代码。在std::vector的情况下,最好使用描述性名称编写一个函数,该函数以您希望的方式在std::vector上运行:

std::vector<int> addComponents(const std::vector<int>& a, const std::vector<int>& b);

std::vector不是一个类?你可以这样做:std::vector操作符+std::vector const&v1,std::vector const&v2{//some code here;}int操作符+std::vector const&v1,std::string const&s2{//some code here;}@down投票者,请评论!每个问题请回答一个问题。理想情况下,是一个连贯的问题。反对票是支持这个问题的,加上你在这个问题上几乎没有付出任何努力。您没有检查类型名称的格式,甚至连I.No这个词的大写都懒得操心。运算符重载必须至少涉及一个类或枚举类型的操作数。即,用户或库定义的类型,而不是内置类型。所以void*operatorconst char*lhs,const int*rhs{return NULL;}将不会被删除。@MartinBonner。正确,为了澄清,我将添加它。如果我没有弄错的话,允许使用两个结构类型的运算符重载。我使用示例“struct A{int A;char b;};struct A operator+struct A&var1,struct A&var2{struct A result;result.A=var1.A+var2.A;returnresult;}'@Rajesh。正确,用户重载运算符需要至少一种用户类型才能将其自身与内置运算符区分开来。请您更新您的答案,指出这至少一个用户定义的运算符type@fantaghirocco:哈哈?这是一个新问题吗?停止滥用审查制度。哎呀,我让自己被多重问号所欺骗:我的道歉先生: