转换构造函数
定义
作用:将指定类型的数据转换为类的对象。
1. 参数仅包含一个非本类const引用类型的参数
2. 参数可以进行隐式转换如int->float
可以通过explicit来禁止隐式转换。
举例:
class A { public: A() = default; A(int i) : a(i) {} A retVal() { return a; } void print() { cout << a << endl; } private: int a; }; int main() { A a(2); A b = a.retVal(); A c = 3; a.print(); b.print(); c.print(); return 0; }
类型转换函数
定义
作用:将一个类对象转换成另一个类型的数据
1. 该函数必须为成员函数,不能是友元类型
2. 类型转换函数不能指定返回类型,但是在函数内必须返回一个值传递的目标类型变量
3. 转换函数没有参数
举例
class A { public: A() = default; A(int i) : a(i) {} operator int() { return a; } void print() { cout << a << endl; } private: int a; }; int main() { A a(2); int b = a; A c = b + 1; cout << b << endl; c.print(); return 0; }
类型隐式转换还会发生在非内建A、B之间
1. B公有继承A
class A {}; class B : public A {}; int main() { A a; B b; a = b; return 0; }
2. B中有类型转换函数
class A {}; class B { public: operator A() { return a; } A a; }; int main() { A a; B b; a = b; return 0; }
3. A中实现非explicit的参数为B的构造函数
class B {}; class A { public: A(const B&) {} }; int main() { B b; A a(b); return 0; }