方法1:在源类中定义目标类型转换运算符
#include <iostream> using namespace std; class Dst { public: Dst() { cout << "Dst::Dst()" << endl; } }; class Src { public: Src() { cout << "Src::Src()" << endl; } operator Dst() const { cout << "Src::operator Dst() called" << endl; return Dst(); } };
方法2:在目标类中定义源类对象作参数的构造函数
#include <iostream> using namespace std; class Src;//前置声明,因为在Dst中要用到Src类 class Dst { public: Dst() { cout << "Dst::Dst()" << endl; } Dst(const Src& s) { cout << "Dst::Dst(const Src&)" << endl; } }; class Src { public: Src() { cout << "Src::Src()" << endl; } };
拷贝:同样类的对象拷贝给同样类的新对象;
void Func(Dst d) {} int main() { Src s; Dst d1(s);//这是直接构造,不是类型转化 Dst d2 = s;//自动类型转换,注意:不要与拷贝构造函数搞混了;拷贝构造时同样类型对象之间的操作; Func(s);//自动类型转化 return 0; }
注意:两种自定义类型转换的方法不能同时使用;