算术运算符(+)运算符将检查返回类型和传递参数是否

Arithmentic operator(+) operator will check both return type and passing arguments or not?

本文关键字:运算符 参数 是否 返回类型 检查      更新时间:2023-10-16
#include<iostream>
using namespace std;
class B;
class A {
private:
    int a,b;
public:
    A() {
        a=b=10;
    }
    void show() {
        cout<<"Hello of A: n a:"<<a<<"  b:"<<b;
    }
friend  A operator+( A AA ,B BB) ;
friend  B operator+ ( B BB,A AA);
friend  B operator+( A AAA ,B BB) ; 
};
class B {
private:
    int c,d;
public:
    B() {
        c=d=20;
    }
    void show() {
        cout<<"nHello of B: n c:"<<c<<" d:"<<d;
    }
friend  A operator+ ( A AA,B BB);
friend  B operator+ ( B BB, A AA);
friend  B operator+( A AA ,B BB) ;
};
A operator+(A AA ,B BB) {
         A temp ;
         temp.a = AA.a + BB.c;
         temp.b = AA.b + BB.d; 
         return temp;
}
B operator+( B BB, A AA) {
        B temp;
        temp.c = AA.a+BB.c;
        temp.d = AA.b+BB.d;
        return temp;
} 
int main() {
class A aa;class B bb;
class A aa1 = aa + bb;
aa1.show();
class B bb1 = bb + aa;
bb1.show() ;
}

嗨,我刚刚尝试了这个程序,并得到了编译错误作为朋友 A 运算符 + ( A AA,B BB); 再次被重新定义为朋友 B 运算符 + ( A AA,B BB);据我了解,重载将检查返回类型和传递参数。但是在这里我不确定为什么我会收到编译时错误标记,函数重定义是!.有人可以帮助我吗!

以下是我尝试在unix终端中运行时遇到的错误,

CC 过载.cpp

"重载.cpp",第 17 行:错误:运算符 +(A, B),返回 B,之前已声明返回 A。"重载.cpp",第 29 行:错误:运算符+(A, B),返回 A,之前已声明返回 B。"重载.cpp",第 31 行:错误:运算符+(A, B),返回 B,之前已声明返回 A。"重载.cpp",第 33 行:错误:运算符 +(A, B),返回 A,之前已声明返回 B。"重载.cpp",第 45 行:错误:"运算符+(A,B)"和"运算符+(A,B)"之间的重载歧义。检测到 5 个错误。#

以及我如何在上面的代码中使用类 B b2 = aa + bb; ?

函数的返回类型不参与重载解析。只有函数名称和参数列表(以及成员函数的 cv 限定符)很重要。但是我在您的代码中看不到多个定义。错误在于您重新声明了具有不同返回类型的相同函数:

friend  A operator+( A AA ,B BB) ;
friend  B operator+( A AAA ,B BB) ; // same function, different return type!