内置类型间转换
void f1( int n ) { }
void f2( float n) { }
void f3( const A & a) { }
int main() {
int nVal = 2;
float fVal = 3.14;
f1( nVal );
f1( (int)fVal ); // 强制转换
f2(nVal); // 自动转换,系统自动由低级的int型向更高级的float型转换
f2(fVal);
f3( nVal); // 内置类型向外置类型转换,系统无法识别,报错
f3( fVal); //同上一句
return 0;
}
自定义类型的类型转换
void FA(const A & );
void FB(const B & );
int main( ) {
A a; B b;
FA(a); //正确 FA(b); //错误
FB(a); //错误 FB(b); //正确
return 0;
}
-
使用构造函数进行类型转换
例如
class Fraction {
public:
Fraction(int numerator, int denominator=1)
:num(numerator),den(denominator) { }
Fraction(const A& a) { …. }
private:
int num; int den;
};
class B {
public:
void UseFraction(const Fraction& fra);
};
int main( )
{ A a; B b; b.UserFraction( 2 ); b.UseFraction(a); return 0; }
-
自动转换函数(运算符转换)
//格式
class T {
public:
[explicit] operator DestType( ) [const] {
….
return DestType(…);
};
//说明:
必须有return
可以多个
class和class之间相互转换,不要有二义性
例子
class Fraction {
public:
Fraction(int numerator, int enominator=1)
:num(numerator),den(denominator) { }
operator int( ) const { return num/den; }
explicit operator float( ) const { return ((float)num)/den; } //声明为显式
operator A( ) const;
private:
int num; int den;
};
class B {
public:
void UseInt( int val)
{ cout<<“int =”<<val<<endl; }
void UseFloat( float val)
{ cout<<“float =”<<val<<endl;};
};
int main( )
{ Fraction fra(3,2);
b.UserInt ( fra ); //输出1
b.UseFloat(fra); //输出1,报错,必须为显式调用
b.UseFloat((float)fra); //1.5
return 0;
}