在C++中,程序员使用类作为具体类型来抽象现实世界的对象。有时需要将一种具体类型隐式转换为另一种具体类型或原始类型。在这种情况下,转化运算符扮演着明智的角色。
例如考虑下面的类
#include
#include
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
// Default constructor
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i)
{}
// magnitude : usual function style
double mag()
{
return getMag();
}
// magnitude : conversion operator
operator double ()
{
return getMag();
}
private:
// class helper to get magnitude
double getMag()
{
return sqrt(real * real + imag * imag);
}
};
int main()
{
// a Complex object
Complex com(3.0, 4.0);
// print magnitude
cout << com.mag() << endl;
// same can be done like this
cout << com << endl;
}
我们以两种不同的方式打印“复杂”对象的大小。
注意,不鼓励使用此类智能(优于智能?)技术。编译器在基于类型而不是程序员期望的类型上调用适当的函数,将具有更多的控制权。最好使用其他技术,例如类/对象特定的成员函数(或使用C++ Variant类)来执行此类转换。在某些地方,例如与现有C库进行兼容调用时,这些是不可避免的。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。