#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终端中运行时遇到的错误
&#34; overloading.cpp&#34;,第17行:错误:运算符+(A,B),返回B,之前声明返回A. &#34; overloading.cpp&#34;,第29行:错误:运算符+(A,B),返回A,之前已声明返回B. &#34; overloading.cpp&#34;,第31行:错误:运算符+(A,B),返回B,之前声明返回A. &#34; overloading.cpp&#34;,第33行:错误:运算符+(A,B),返回A,之前已声明返回B. &#34; overloading.cpp&#34;,第45行:错误:&#34;运算符+(A,B)&#34;之间的歧义过载和&#34;运算符+(A,B)&#34;。 5检测到错误。 #
我怎样才能使用B类b2 = aa + bb;在上面的代码中?
答案 0 :(得分:3)
函数的返回类型不参与重载决策。只有函数名称和参数列表(以及成员函数的cv限定符)才有意义。但我在代码中看不到多个定义。错误是您使用不同的返回类型重新声明了相同的函数:
friend A operator+( A AA ,B BB) ;
friend B operator+( A AAA ,B BB) ; // same function, different return type!