企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 转换运算符 ``` class Fraction{ public: Fraction(int n,int d=1): m_Numerator(n), m_Denominator(d){} // 转 dobule operator double() const{ return (double)m_Numerator/m_Denominator; } // 转 QString operator QString() const{ return QString("%1/%2").arg(m_Numerator).arg(m_Denominator); } private: int m_Numerator,m_Denominator; }; QTextStream& operator<<(QTextStream& os,const Fraction& f) { os<<"operator<<"<<static_cast<QString>(f); return os; } ``` 使用 ``` Fraction fra(4,3); double d=fra; QString str=fra; qDebug()<<d; //1.33333 qDebug()<<str;//"4/3" std::cout<<fra<<std::endl;//1.33333 ``` ## 下标运算符 - 许多列表和与数组相似的类都提供与数组一致的接口,但还具有更多的功能。 - 下标运算符 operator[]被限制成只使用一个参数。 - 它通常被用来提供对容器中某个元素的访问 ``` class Vect{ public: explicit Vect(int n=10): m_size(n){ assert(n>0); m_p=new int[m_size]; } int& operator[](int i){ assert(i<m_size); return m_p[i]; } int ub(){ return m_size; } private: int* m_p; int m_size; }; ``` 使用 ``` Vect vect(5); for(int i=0;i<vect.ub();i++){ vect[i]=i*2; } qDebug()<<vect[2];//4 ``` ## 函数运算符 ``` class MyOp{ public: explicit MyOp(int size):m_size(size){ } // 重载括号 void operator()(QString msg){ qDebug()<<msg; } // 重载括号 void operator()(QString msg,QString who){ qDebug()<<who<<":"<<msg; } bool operator==(int num){ return m_size==num; } void operator=(int num){ m_size=num; } int size(){ return m_size; } private: int m_size; }; ``` 使用 ``` MyOp op(3); op("hello"); op("hello","cpj"); qDebug()<<(op==4); // fasle op=5; qDebug()<<op.size(); //5 ```