算术运算符(+)运算符将检查返回类型和传递参数是否
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 运算符 + ( 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!
相关文章:
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- 运算符重载:"operator+"必须采用零个或一个参数
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 参数相关查找和流运算符重载
- C++:使用运算符 = 调用多参数构造函数
- 了解布尔运算符==(参数 1,参数 2)
- 我能否根据其运算符()的签名专门化可变参数模板参数
- SFINAE 检查模板参数运算符
- 不允许运算符 const 参数调用 const 成员函数
- 为私有结构定义双参数运算符重载
- C++ 通过自定义赋值运算符隐式转换函数参数
- 函数参数变量总是需要 & 或 * 运算符吗?
- 算术运算符参数类型
- 隐式转换以匹配运算符参数
- 对重载运算符参数执行隐式转换时出现编译器错误
- 避免在C++中强制转换运算符参数
- 如果给定模板不是运算符参数类型的专用模板,则禁用运算符重载
- 以及C++中的运算符参数求值
- 这个函数的运算符参数太多