C++ 中的重载运算符"+"取决于参数
Overload operator "+" in c++ depending from the parameters
让我们考虑一下
我们已经创建了自己的类数组。现在我们要重载"+"运算符,以便:
Array a(5), b(3);
Array c = a + b;
它只是将一个数组和 B 数组粘合在一起,我们得到一个长度为 5+3=8 的 C 数组。
现在,我已经意识到这种情况写在我 Array.cpp 文件中:
Array Array::operator+(const Array &Right)
{
Array temp_A(m_iCurInd+Right.m_iCurInd);
// here some stuff, not important to the quastion//
return temp_A;
}
一切都很好。
但是,如果我想:
Array a(5);
Array c = a + 2;
Array d = 2 + a;
所以 d 和 c 的长度为 6,开头和结尾分别有"2"?
我试过了
为了实现 firs 案例,所以在 Array.h 文件中是这样一行:
Array operator+(const int &value); //a+2
在数组中.cpp:
Array Array::operator+(const int &value)
{
Array temp_A(m_iCurInd+1);
// here some stuff, not important to the quastion//
return temp_A;
}
但它不编译,因为它不喜欢这些类型(特别是const int和我认为)。我怎么做?壳是:
Array int::operator+(const Array &Right){
....
}
对于"2+A"案例还是类似的东西?请告诉我。
你可以
这样做:
class Array
{
// ...
// Insert an Element
public:
void prepend(int);
void append(int);
// Append an Array
void append(const Array&);
// ...
};
inline Array operator + (const Array& a, const Array& b) {
Array result(a);
result.append(b);
return result;
}
inline Array operator + (const Array& a, int b) {
Array result(a);
result.append(b);
return result;
}
inline Array operator + (int a, const Array& b) {
Array result(b);
result.prepend(a);
return result;
}
您可以将 operator+ 定义为非成员函数以支持混合模式算术。
Array operator+( const Array &arr1, const Array &arr2 )
然后为要支持混合模式算术的类型提供适当的单参数构造函数。
若要允许语法Array + int
,您有两个选择:创建 operator+
的成员函数重载,其中它采用的参数是整数,或者创建一个参数分别为 Array
和 int
的自由operator+
。看起来您已经正确完成了成员函数重载,但为了确保,它应该如下所示:
class Array
{
// ...
Array operator+(int rhs)
{
// ...
}
};
现在Array + int
应该工作了。如果没有,则说明您在函数中做错了什么。
要允许语法int + Array
,您需要一个自由运算符函数,因为成员函数不会重载左侧的int
:
Array operator+(int lhs, Array const& rhs)
{
return rhs + lhs;
}
rhs + lhs
调用成员函数重载Array::operator+()
。
相关文章:
- 将强制转换简化为取决于参数的类型
- cpp 模板专用化,错误说参数 1 的类型为 T,这取决于参数 T
- 模板函数,其中模板参数类型取决于函数参数
- GCC:指定的界限取决于源参数的长度
- 具有尾随返回类型的通用 lambda,具体取决于 C++11 中的可变参数
- 类模板中的std ::数组的大小,具体取决于模板参数
- LIBELAS是否取决于相机参数
- 具有取决于模板参数的方法的模板类
- 模板层次结构中的可选虚拟函数,具体取决于参数
- 约束模板参数取决于传递的函子
- 为什么固定尺寸错误发生取决于默认参数
- C++14 lambda 的默认参数类型推导,具体取决于前面的参数
- 委托构造函数和默认参数,具体取决于其他参数
- 取决于参数的数量,将其返回结构对象,并将其分配给常规结构的对象
- 具有模板参数取决于参数列表
- 返回类型取决于模板参数
- 是否可以定义一个 C++11 可变参数类模板,其可变参数基数取决于整数模板参数
- 返回取决于sizeof的变量类型..参数包
- 模板化结构的友元函数,其参数类型取决于结构的内部
- 变量模板函数,其中返回类型取决于模板参数列表