1.构造函数转换法:
class One
{
public:
One();
virtual ~One();
};
class Two
{
public:
void Test(Two );
/* explicit */Two(const One& );
Two();
virtual ~Two();
};
在上述One,Two两个类中,由于B中有以A类型对象为参数的构造函数,则在
One one;
Two two;
two.Test(one);
会自动调用B的该构造函数把One类型的参数转换为Two类型的。
2.重载“=”操作符
class A
{
public:
A();
operator =(const B& b) {cout<<"operator = conversion..."<<endl;}
virtual ~A();
};
class B
{
public:
B();
virtual ~B();
};
则在下面的情况下,
B b;
A a ;
a = b;
B类型会自动转换为A类型。
3.operator type转换方式:
class A
{
public:
A();
virtual ~A();
};
class B
{
public:
B();
operator A(){cout<<"operator A() conversion..."<<endl; };
virtual ~B();
};
则在下面的情况下:
B b;
A a = b;
会调用operator A()来进行类型转换。
4.继承方式
class A
{
public:
A();
virtual ~A();
};
class B :public A
{
public:
B();
virtual ~B();
};
则在下面的情况下:
B b;
A a = b;
B类型也会自动转换为A类型。
class One
{
public:
One();
virtual ~One();
};
class Two
{
public:
void Test(Two );
/* explicit */Two(const One& );
Two();
virtual ~Two();
};
在上述One,Two两个类中,由于B中有以A类型对象为参数的构造函数,则在
One one;
Two two;
two.Test(one);
会自动调用B的该构造函数把One类型的参数转换为Two类型的。
2.重载“=”操作符
class A
{
public:
A();
operator =(const B& b) {cout<<"operator = conversion..."<<endl;}
virtual ~A();
};
class B
{
public:
B();
virtual ~B();
};
则在下面的情况下,
B b;
A a ;
a = b;
B类型会自动转换为A类型。
3.operator type转换方式:
class A
{
public:
A();
virtual ~A();
};
class B
{
public:
B();
operator A(){cout<<"operator A() conversion..."<<endl; };
virtual ~B();
};
则在下面的情况下:
B b;
A a = b;
会调用operator A()来进行类型转换。
4.继承方式
class A
{
public:
A();
virtual ~A();
};
class B :public A
{
public:
B();
virtual ~B();
};
则在下面的情况下:
B b;
A a = b;
B类型也会自动转换为A类型。