10.9C++类型转换函数(类型转换运算符函数)

10.9C++类型转换函数(类型转换运算符函数)

ID:37928144

大小:66.50 KB

页数:6页

时间:2019-06-03

10.9C++类型转换函数(类型转换运算符函数)_第1页
10.9C++类型转换函数(类型转换运算符函数)_第2页
10.9C++类型转换函数(类型转换运算符函数)_第3页
10.9C++类型转换函数(类型转换运算符函数)_第4页
10.9C++类型转换函数(类型转换运算符函数)_第5页
资源描述:

《10.9C++类型转换函数(类型转换运算符函数)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。C++提供类型转换函数(typeconversionfunction)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数:  operatordouble()  {    returnreal;  }函数返回double型变量real的值。它的作用是将一个Complex类对象转换为一个double型数据,其值是Complex类中的

2、数据成员real的值。请注意,函数名是operatordouble,这点是和运算符重载时的规律一致的(在定义运算符“+”的重载函数时,函数名是operator+)。类型转换函数的一般形式为:  operator类型名()  {    实现转换的语句  }在函数名前面不能指定函数类型,函数没有参数。其返回值的类型是由函数名中指定的类型名来确定的。类型转换函数只能作为成员函数,因为转换的主体是本类的对象。不能作为友元函数或普通函数。从函数形式可以看到,它与运算符重载函数相似,都是用关键字operator开头,只是被重载的是类型名。double类型经过重载后,除了原有的含义外,还获得新的含义(将一个

3、Complex类对象转换为double类型数据,并指定了转换方法)。这样,编译系统不仅能识别原有的double型数据,而且还会把Complex类对象作为double型数据处理。那么程序中的Complex类对具有双重身份,既是Complex类对象,又可作为double类型数据。Complex类对象只有在需要时才进行转换,要根据表达式的上下文来决定。转换构造函数和类型转换运算符有一个共同的功能:当需要的时候,编译系统会自动调用这些函数,建立一个无名的临时对象(或临时变量)。[例10.9]使用类型转换函数的简单例子。.#include .using namespace std;.

4、class Complex.{.public:.Complex( ){real=0;imag=0;}.Complex(double r,double i){real=r;imag=i;}.operator double( ) {return real;} //类型转换函数.private:.double real;.double imag;.};. .int main( ).{.Complex c1(3,4),c2(5,-10),c3;.double d;.d=2.5+c1;//要求将一个double数据与Complex类数据相加.cout<

5、析:1)如果在Complex类中没有定义类型转换函数operatordouble,程序编译将出错。因为不能实现double型数据与Complex类对象的相加。现在,已定义了成员函数operatordouble,就可以利用它将Complex类对象转换为double型数据。请注意,程序中不必显式地调用类型转换函数,它是自动被调用的,即隐式调用。在什么情况下调用类型转换函数呢?编译系统在处理表达式2.5+cl时,发现运算符“+”的左侧是double型数据,而右侧是Complex类对象,又无运算符“+”重载函数,不能直接相加,编译系统发现有对double的重载函数,因此调用这个函数,返回一个doubl

6、e型数据,然后与2.5相加。2)如果在main函数中加一个语句:  c3=c2;请问此时编译系统是把c2按Complex类对象处理呢,还是按double型数据处理?由于赋值号两侧都是同一类的数据,是可以合法进行赋值的,没有必要把c2转换为double型数据。3)如果在Complex类中声明了重载运算符“+”函数作为友元函数:  Complexoperator+(Complexc1,Complexc2)//定义运算符“+”重载函数  {    returnComplex(c1.real+c2.real,c1.imag+c2.imag);  }若在main函数中有语句  c3=c1+c2;由于已对

7、运算符“+”重载,使之能用于两个Complex类对象的相加,因此将c1和c2按Complex类对象处理,相加后赋值给同类对象c3。如果改为  d=c1+c2;//d为double型变量将c1与c2两个类对象相加,得到一个临时的Complex类对象,由于它不能赋值给double型变量,而又有对double的重载函数,于是调用此函数,把临时类对象转换为double数据,然后赋给d。 从前面的介绍可知,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。