首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这段运算符重载咋回事

2013-07-01 
这段运算符重载怎么回事template class _Conusmer_Data_Typestruct _Conumser_Plus{_Conusmer_Data_Type

这段运算符重载怎么回事

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>&上的

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

热点排行