读书人

这几句话是运算符重载吗?求好手看看

发布时间: 2013-07-04 11:45:51 作者: rapoo

这几句话是运算符重载吗?求高手看看
本帖最后由 chenxue1111 于 2013-05-03 20:47:24 编辑

Mat operator()( Range rowRange, Range colRange ) const;
Mat operator()( const Rect& roi ) const;
Mat operator()( const Range* ranges ) const;

//! converts header to CvMat; no data is copied
operator CvMat() const;
//! converts header to CvMatND; no data is copied
operator CvMatND() const;
//! converts header to IplImage; no data is copied
operator IplImage() const;

这是运算符重载吗?如果是 重载的是什么?
[解决办法]
前三个是重载了()操作符。。作用就是这个类的对象可以当作特定的函数,例如

#include <iostream>

class A{
public:
int operator()(int x, int y){
return x + y;
}
};

int main(){
A sum;
std::cout<<sum(1, 2)<<std::endl;//效果跟函数int sum(int, int)一样。。
return 0;
}

后三个不是重载操作符,它的作用是将类对象转化为特定类型的对象,下面是一个例子

#include <iostream>

using namespace std;

class A{
public:
A(int x = 0): val(x){}
operator int(){ //可以将类A的对象转化为int, 转化的时候会调用这个函数。。
cout<<"operator int"<<endl;
return val;
}
private:
int val;
};

void fun(int x){
cout<<x<<endl;
}

int main(){
A a(1);
fun(a);//可以在需要int类型的地方使用类A的对象。。
return 0;
}

读书人网 >C++

热点推荐