day6_自定义类型转换

#include <iostream>

using namespace std;

class Point2D{
public:
    Point2D(int x, int y):m_x(x), m_y(y){}
    friend ostream& operator<<(ostream& os, Point2D& p2)
    {
        return os<<"2D(" << p2.m_x << ',' << p2.m_y << ')';
    }
    friend class Point3D;
    int m_x;
    int m_y;
private:
};

class Point3D{
public:
    Point3D(int x, int y, int z):m_x(x), m_y(y), m_z(z){}
    //在目标类型中定义从原类型的类型转换构造函数
    Point3D(Point2D const& p2): m_x(p2.m_x), m_y(p2.m_y), m_z(0){}
    //在原类型中定义到目标类型的类型转换运算符函数
    operator Point2D(void) const
    {
        return Point2D(m_x, m_y);
    }
    friend ostream& operator<<(ostream& os, Point3D const& p3)
    {
        return os<< "3D(" << p3.m_x << ',' << p3.m_y << ',' << p3.m_z << ')'; 
    }
    int m_x;
    int m_y;
    int m_z;    
};

int main(void)
{
    Point2D p2(100, 200);
    cout << p2 << endl;
    Point3D p3 = p2;
    cout << p3 << endl;
    Point2D p4 = p3;
    cout << p4 << endl;
    
    return 0;
}

 

posted @ 2019-04-07 19:16  鸿蒙过客  阅读(86)  评论(0编辑  收藏  举报