您的位置:首页 > 其它

面向对象的程序设计-11-类类型转换

2013-01-03 14:46 253 查看
/*类型转换

是将一种类型的值转换为另一种类型的值

预定义类型的两种类型转换方式:

标准类型转换(隐式类型转换)

显式类型转换

标准类型转换(隐式类型转换)

当char或short类型对象与int对象进行运算时,前两者转换为int

两个操作对象类型不一致时,在算术运算前,级别低的转化为级别高的

执行赋值E1=E2时,赋值前E2的类型先转换为E1的类型

对于显式转换

1)强制转换法:(类型名)表达式

2)函数法:类型名(表达式)

都将表达式强制地转换为类型名所代表的类型的值

类对象的类型转换可由两种方式说明:

构造函数和转换函数

*/

//构造函数的类型转换

class X

{

public:

X(int);

X(const char *,int =0);

};

void f(X arg)

{

X a=X(1);//a=1;调用构造函数X(int)把1转换为类型X后赋给对象a

X b="jess";//b=X("jess",0)

a=2;//a=X(2)。隐式调用构造函数X(int)把2转换为类型X。

//隐式类型转换时由系统自动完成的。当不希望发生隐式转换的时候,

//可以使用关键字explicit。如explicit X(int);

}

/*带参数的构造函数类型转换的能力有限,无法将一个类类型转换为基本类型

类类型转换函数是一特殊的成员函数,在类对象之间提供一种类似显式类型的转换机制*/

/*2类类型转换函数语法形式:

X::operator T()

{

return T 类型的对象

}

功能:将类型X的对象转换为类型T的对象

T可以使预定义的类型,也可以是用户定义类型

函数没有参数,没有返回类型,但必须有一条return语句,返回T类型的对象

该函数只能是成员函数,不能是友元函数

*/

class Y

{

public:

operator int();

};

void ff(Y y)

{

int i=int(y);

i=(int)y;

i=y;//都是用类型转换函数作类型转换Y::operator int()

}

/*在调用转换函数上有两种使用方式

隐式使用 i=a;

显式使用 i=a.operator int()//int(a),(int)a

*/

/*使用不同函数作类型转换函数

int i=y;//用类型转换函数进行转换

Y i=y;//用构造函数进行转换

*/

/*3.类类型转换的二义性

若是一个类既有用于转换的构造函数,又拥有类型转换函数:

X(int);//构造函数

operator int();//类型转换函数

则对于语句 a=a+i的解释会出现歧义,

所以此时需要用显式地调用类型转换函数

类型转换函数可以被继承,可以是虚的,但是不能被重载,

因为它没有参数*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐