- 论坛徽章:
- 44
|
本帖最后由 windoze 于 2014-05-28 10:46 编辑
回复 8# Herowinter
这些问题不是语法问题,而是“你该怎么做”的问题。
如果operator+是一个成员函数,A:: operator+(const A& )的返回类型按照惯例应该是一个右值,而且是一个值类型,在这里你唯一的选择就是A(话说此时你正在写A,还没有B呢)
但如果它返回A,那么a+b的返回的就是一个A的实例,也就是说,a+b会先把b“切片”成一个A类型的对象,再进行运算。
如果operator+是全局函数,对于类型A和B,你必须定义:
A operator+(const &A, const &A );
B operator+(const &A, const &B );
如果要满足交换律,你还得有:
B operator+(const &B, const &A );
B operator+(const &B, const &B );
如果B再有个子类C,上述的函数个数就要翻倍,如果C再有个子类D……
到这里,才只解决了一个加号而已,嗯,不说好了还有四则运算相等不等大于小于吗~~~~~~~~~~~~~ |
|