Table of Content
本篇主要介绍C++ 中支持自定义类型转换的构造函数。
目标类::目标类(const 源类 &源类对象) {
//自定义规则进行复制
//可以使用初始化列表的方式
}
-
实现从源类到目标类之间的隐式类型转换。
-
使用explicit关键字修饰的构造函数,表示这个构造函数只能用于显式类型转换,防止潜在的错误。
/*
支持自定义类型转换的构造函数userDefined.cpp
*/
#include <iostream>
using namespace std;
//声明Point2d
class Point2d;
class Point3d {
private:
int m_x;
int m_y;
int m_z;
public:
//explicit告诉编译器当前构造函数不支持自定义类型转换,也就是不能发生隐式类型转换,只能发生显式类型转换
explicit Point3d(int x,int y,int z):m_x(x),m_y(y),m_z(z){}
void show(void) {
cout << "三维坐标(" << m_x << ',' << m_y << ',' << m_z << ')' << endl;
}
//提供一个支持自定义类型转换的构造函数
Point3d(const Point2d &pt2);//:m_x(pt2.m_x),m_y(pt2.m_y),m_z(0){}
};
class Point2d {
private:
int m_x;
int m_y;
public:
Point2d(int x,int y):m_x(x),m_y(y){}
void show(void) {
cout << "二维坐标(" << m_x << ',' << m_y << ')' << endl;
}
//声明Point3d类为当前类的友元
friend class Point3d;
};
Point3d::Point3d(const Point2d &pt2):m_x(pt2.m_x),m_y(pt2.m_y),m_z(0){}
int main(void) {
Point3d pt3(10,20,30);
pt3.show();
Point2d pt2(100,200);
pt2.show();
pt3 = pt2;
pt3.show();
pt3 = static_cast<Point3d>(100);
pt3.show();
return 0;
}