如何定义不对称+运算符
How to define asymmetric + operator
我正在尝试为int + Date
定义+
运算符,并使其成为return
和int
。因此,我将operator+
定义为定义Date + int
的成员,并定义了一个非成员函数operator+(int, Date)
,但当在主函数中使用它时,它似乎没有使用该函数,并产生错误。
class Date
{
int D, M, Y;
public:
Date();
Date(int, int, int);
~Date(void);
int getDay() const;
Date operator+(Date) const;
Date operator+(int) const;
};
Date::Date() : D{15}, Y{2012}, M{2} { }
Date::Date(int d, int m, int y) : D{d}, Y{y}, M{m} {}
Date::~Date(void) {}
int Date::getDay() const { return D; }
Date Date::operator+(Date d) const
{
return Date(d.D + D, d.M + M, d.Y + Y);
}
Date Date::operator+(int d) const
{
return Date(d + D,M,Y);
}
int operator+(int i,Date d) // This is what is wrong apparently.
{
return i + d.getDay();
}
int main ()
{
Date d = Date();
int i = 7 + d; // This is what generates the error at compile time.
cout << i;
return 0;
}
您可以将其定义为类外的友好函数。
请考虑带有示例的链接:
http://www.learncpp.com/cpp-tutorial/92-overloading-the-arithmetic-operators/
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 不允许运算符 const 参数调用 const 成员函数
- 为什么 std::vector 使用 std::分配器而不是运算符 new 和 delete?
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- 在 c++ 中不使用 * 运算符将十进制值相乘
- 为什么 std::variant 找不到运算符<() 当与比较类不在同一命名空间中时
- 为什么当"::"的行为不像运算符时被称为'scope resolution operator'?
- std::shared_ptr 和 std::unique_ptr 构造函数之间的不对称
- 离散分布不对称
- 为什么 c++ 编译器找不到运算符<<
- g++ std::set 找不到运算符<为类定义
- <<找不到运算符,尽管定义了 Foo 类型的右操作数,但该运算符仍采用类型为 Foo 的右侧操作数
- 为什么当我使用额外的括号而不使用运算符重载时,插入运算符在 std::cout 中给出不同的结果?
- 不带运算符==的类相等性检查
- C++中[不]相等运算符的求值顺序
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 模板 = 找不到运算符
- C++ STL 比较映射找不到(运算符==)
- 如何定义不对称+运算符