面向对象的程序设计-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的解释会出现歧义,
所以此时需要用显式地调用类型转换函数
类型转换函数可以被继承,可以是虚的,但是不能被重载,
因为它没有参数*/
是将一种类型的值转换为另一种类型的值
预定义类型的两种类型转换方式:
标准类型转换(隐式类型转换)
显式类型转换
标准类型转换(隐式类型转换)
当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的解释会出现歧义,
所以此时需要用显式地调用类型转换函数
类型转换函数可以被继承,可以是虚的,但是不能被重载,
因为它没有参数*/
相关文章推荐
- 面向对象的程序设计-12-类型转换和运算符重载的实例
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
- C++面向对象中的向上转换 向下转换 以及OOP相关的类型转换
- 【面向对象程序设计常见面试题】数组在做函数实参的时候会转变为什么类型?
- The different types of polymorphism in OOP-面向对象程序设计中的多态类型
- Asp.Net Ajax 学习笔记11 Microsoft AJAX Library中的面向对象类型系统
- [黑马程序员]11[OC语言]圆,点问题, OC的面向对象程序设计思想和类封装
- 【面向对象程序设计常见面试题】类中成员变量怎么进行初始化?(11)
- 面向对象程序设计(多态、转换、继承)
- C++面向对象中的向上转换 向下转换 以及OOP相关的类型转换
- 面向对象程序设计7-11
- 面向对象第一次练手-------ArrayList集合、类、对象、冒泡排序、类型转换
- 面向对象图解、类型转换图解,写给.Net新手
- 面向对象图解、类型转换图解,写给.Net新手
- 【面向对象程序设计常见面试题】对对象成员进行初始化的次序是什么?(11)
- Java面向对象【经典案例】强制/自动类型转换与类型安全的转换
- 【面向对象程序设计常见面试题】类和对象之间的关系是什么?(11)
- 【面向对象程序设计常见面试题】对类的成员的访问属性有什么?(11)