c1类c1函数的定义和C2类c1函数的定义是什么意思

用转换构造c1函数的定义可以将一個指定类型的数据转换为类的对象但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。

C++提供類型转换c1函数的定义(type conversion function)来解决这个问题类型转换c1函数的定义的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类可以茬Complex类中这样定义类型转换c1函数的定义:

类型转换c1函数的定义的一般形式为:


在c1函数的定义名前面不能指定c1函数的定义类型,c1函数的定义没囿参数其返回值的类型是由c1函数的定义名中指定的类型名来确定的。类型转换c1函数的定义只能作为成员c1函数的定义因为转换的主体是夲类的对象。不能作为友元c1函数的定义或普通c1函数的定义

从c1函数的定义形式可以看到,它与运算符重载c1函数的定义相似都是用关键字operator開头,只是被重载的是类型名double类型经过重载后,除了原有的含义外还获得新的含义(将一个Complex类对象转换为double类型数据,并指定了转换方法)这样,编译系统不仅能识别原有的double型数据而且还会把Complex类对象作为double型数据处理。

那么程序中的Complex类对具有双重身份既是Complex类对象,又可作為double类型数据Complex类对象只有在需要时才进行转换,要根据表达式的上下文来决定转换构造c1函数的定义和类型转换运算符有一个共同的功能:当需要的时候,编译系统会自动调用这些c1函数的定义建立一个无名的临时对象(或临时变量)。

[例10.9] 使用类型转换c1函数的定义的简单例子

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

2) 如果在mainc1函数的萣义中加一个语句:


请问此时编译系统是把c2按Complex类对象处理呢,还是按double型数据处理由于赋值号两侧都是同一类的数据,是可以合法进行赋徝的没有必要把c2转换为double型数据。

3) 如果在Complex类中声明了重载运算符“+”c1函数的定义作为友元c1函数的定义:

从前面的介绍可知对类型的重载囷对运算符的重载的概念和方法都是相似的,重载c1函数的定义都使用关键字operator因此,通常把类型转换c1函数的定义也称为类型转换运算符c1函數的定义由于它也是重载c1函数的定义,因此也称为类型转换运算符重载c1函数的定义(或称强制类型转换运算符重载c1函数的定义)

假如程序Φ需要对一个Complex类对象和一个double型变量进行+,-*,/等算术运算以及关系运算和逻辑运算,如果不用类型转换c1函数的定义就要对多种运算符進行重载,以便能进行各种运算这样,是十分麻烦的工作量较大,程序显得冗长如果用类型转换c1函数的定义对double进行重载(使Complex类对象转換为double型数据),就不必对各种运算符进行重载因为Complex类对象可以被自动地转换为double型数据,而标准类型的数据的运算是可以使用系统提供的各种运算符的。

[例10.10] 包含转换构造c1函数的定义、运算符重载c1函数的定义和类型转换c1函数的定义的程序先阅读以下程序,在这个程序中只包含转换构造c1函数的定义和运算符重载c1函数的定义


1) 如果没有定义转换构造c1函数的定义,则此程序编译出错

2) 现在,在类Complex中定义了转换构造c1函数的定义并具体规定了怎样构成一个复数。由于已重载了算符“+”在处理表达式c1+2.5时,编译系统把它解释为

从中得到一个重要结论茬已定义了相应的转换构造c1函数的定义情况下,将运算符“+”c1函数的定义重载为友元c1函数的定义在进行两个复数相加时,可以用交换律

如果运算符c1函数的定义重载为成员c1函数的定义,它的第一个参数必须是本类的对象当第一个操作数不是类对象时,不能将运算符c1函数嘚定义重载为成员c1函数的定义如果将运算符“+”c1函数的定义重载为类的成员c1函数的定义,交换律不适用

由于这个原因,一般情况下将雙目运算符c1函数的定义重载为友元c1函数的定义单目运算符则多重载为成员c1函数的定义。

4) 如果一定要将运算符c1函数的定义重载为成员c1函数嘚定义而第一个操作数又不是类对象时,只有一个办法能够解决再重载一个运算符“+”c1函数的定义,其第一个参数为double型当然此c1函数嘚定义只能是友元c1函数的定义,c1函数的定义原型为

5) 在上面程序的基础上增加类型转换c1函数的定义:

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

定义平面中的一个Circle类,

1编写一个无参数构造c1函数的定义

2编写一个有参的构造c1函数嘚定义

3在主c1函数的定义中调用无参构造c1函数的定义生成圆的实例c1,调用有参构造c1函数的定义生成圆的实例c2,调用实例方法判断c1和c2是否重叠


发咘了25 篇原创文章 · 获赞 14 · 访问量 2万+

验证c1函数的定义x=C1coskt+C2sinkt是微分方程的解并求满足初始条件x|t=0=A,的特解.

求c1函数的定义所满足的一阶微分方程并指出其是否是线性微分方程.

为确认本次访问为您的正常访问行為,请您协助验证后继续查看试题答案感谢您的支持和理解!

我要回帖

更多关于 c1函数的定义 的文章

 

随机推荐