C++ 中的转换运算符
在 C++ 中,程序员使用类作为具体类型来抽象现实世界的对象。有时,需要将一种具体类型隐式转换为另一种具体类型或原始类型。转换运算符在这种情况下起着重要作用。它类似于类中的运算符重载函数。
例如考虑下面的类,在这里,我们正在为复数创建一个类。它有两个数据成员:实数和虚数。
C++
// CPP Program to demonstrate Conversion Operators
#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;
}
输出
5
5
我们以两种不同的方式打印复杂对象的大小。
请注意,编译器在调用基于类型的适当函数时将拥有更多控制权,而不是程序员所期望的。使用其他技术如类/对象特定成员函数(或使用 C++ Variant 类)来执行此类转换将是一个很好的做法。在某些地方,例如在与现有 C 库进行兼容调用时,这些是不可避免的。