📜  高级C++ |转换运算符

📅  最后修改于: 2021-05-26 01:03:59             🧑  作者: Mango

在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等的更多准备工作,请参阅“完整面试准备课程”