读书人

这段运算符重载咋回事

发布时间: 2013-07-01 12:33:04 作者: rapoo

这段运算符重载怎么回事

template <class _Conusmer_Data_Type>

struct _Conumser_Plus
{

_Conusmer_Data_Type _A_one;

_Conusmer_Data_Type _A_tow;

_Conumser_Plus &operator()(_Conumser_Plus &,_Conumser_Plus &);
};

template <class _Conumser_Data_Type>

_Conumser_Plus<_Conumser_Data_Type>& _Conumser_Plus::operator()(_Conumser_Plus<_Conumser_Data_Type>& _J,_Conumser_Plus<_Conumser_Data_Type>& K)

{

return _J._A_one+K._A_tow;

}


上面的代码有问题。。。求大神解释
[解决办法]
定义改为下边这样。。

template <class _Conumser_Data_Type>
_Conumser_Plus<_Conumser_Data_Type>& _Conumser_Plus<_Conumser_Data_Type>::operator()(_Conumser_Plus& _J,_Conumser_Plus& K)
{
return _J._A_one+K._A_tow;
}

[解决办法]
引用:
Quote: 引用:

加法用 operator+ 呀. 怎么重载 () ?
而且 operator+ 作为成员函数的话只接受一个参数, 作为全局函数才接受两个参数.
可以的
std::plus::operator()
T operator()( const T& lhs, const T& rhs ) const;
Returns the sum of lhs and rhs.
Parameters
lhs, rhs-values to sum
Return value
The result of lhs + rhs.


Exceptions
(none)
Possible implementation
T operator()(const T &lhs, const T &rhs) const
{
return lhs + rhs;
}



标准库函数


重载 () 后不是提供 + 操作符了, 而是一个函数对象.
当然, 如果你确认你是想这样用, 只是语法上的问题的话, 试试
外面定义的 _Conumser_Plus::operator() 加上模板参数 _Conumser_Plus<_Conusmer_Data_Type>::operator()

[解决办法]
1.类域,定义在类体之外的成员函数的成员函数名之前的文本没在类域之中,需要声明加模板参数限定
2.怎么确保_Conusmer_Data_Type和_Conumser_Plus<_Conumser_Data_Type>之间存在类型转换?
3.即使存在类型转换,一般情况下,_J._A_one+K._A_tow的结果是一个临时对象,不能被绑定在非const引用上面,所以_J._A_one+K._A_tow是不能被绑定在_Conumser_Plus<_Conumser_Data_Type>&上的

最后,没看明白楼主要实现什么功能。

读书人网 >C++

热点推荐