自定义类之间的类型转换是通过构建构造函数的多态来进行的
在对象刚刚定义时, 即使你使用的是赋值操作符=
, 也是会调用构造函数, 而不是重载的operator=
运算符.
用类型转换构造函数进行类型转换实现其它类型到本类类型的转化。
转换构造函数格式
class 目标类
{
目标类(const 源类 & 源类对象引用)
{
根据需求完成从源类型到目标类型的转换
}
}
特点:
转换构造函数,本质是一个构造函数。是只有一个参数的构造函数。如有多个参数,只能称为构造函数,而不是转换函数。
同时为了能够调用源类中的对象,需要设置这一构造函数为源类的友元
explicit是防止隐式类型转换的关键字
- 指定构造函数或转换函数 (C++11起)为显式, 即它不能用于隐式转换和复制初始化.
- explicit 指定符可以与常量表达式一同使用. 函数若且唯若该常量表达式求值为 true 才为显式. (C++20起)
因为构造函数被explicit
修饰后, 就不能再被隐式调用了。也就是displayPoint(1)
这种操作不能直接进行,需要Point3D p3a = static_cast<Point3D> (p2); 或者displayPoint(Point(1))这样的强制类型转换