算术运算符 (+) 运算符是否会同时检查 return 类型和传递的参数?

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

#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 operator+ ( A AA,B BB) 出现了编译错误;再次被重新定义为 friend B operator+ ( A AA,B BB); 据我了解,重载将同时检查 return 类型和传递的参数。 但是在这里我不确定为什么我会收到编译时错误标记,函数重新定义已完成!! 有人可以帮帮我!!

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

CC overloading.cpp

"overloading.cpp",第 17 行:错误:operator+(A, B), returning B, was previously declared returning A. "overloading.cpp",第 29 行:错误:operator+(A, B), returning A, was previously declared returning B. "overloading.cpp",第 31 行:错误:operator+(A, B), returning B, was previously declared returning A. "overloading.cpp",第 33 行:错误:operator+(A, B), returning A, was previously declared returning B. "overloading.cpp",第 45 行:错误:"operator+(A, B)" 和 "operator+(A, B)" 之间的重载歧义。 检测到 5 个错误。 #

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

return 类型的函数不参与重载决策。只有函数名和参数列表(以及成员函数的 cv 限定符)才重要。但是我在您的代码中看不到多个 definition 。错误是您用不同的 return 类型重新声明了相同的函数:

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