当前位置:首页 > 工业控制 > 电子设计自动化
[导读](1)用户定义的转换的必要性:我们希望能够在SmallInt对象和其他SmallInt对象或者内置算术类型的对象之间进行加减操作,我们要通过提供6个SmallInt操作符函数来实现对这些操作的支持: class SmallInt ...{ friend

(1)用户定义的转换的必要性:我们希望能够在SmallInt对象和其他SmallInt对象或者内置算术类型的对象之间进行加减操作,我们要通过提供6个SmallInt操作符函数来实现对这些操作的支持:

class SmallInt ...{

friend operator+( const SmallInt &, int );

friend operator-( const SmallInt &, int );

friend operator-( int, const SmallInt & );

friend operator+( int, const SmallInt & );

public:

SmallInt( int ival ) : value( ival ) ...{ }

operator+( const SmallInt & );

operator- ( const SmallInt & );

// ...

private:

int value;

};

两个成员操作符允许我们加减两个SmallInt对象。友元全局操作符允许我们在SmallInt对象和内置算术类型的对象之间进行加减操作。之所以只需要6个操作符,是因为任何内置算术类型都可以被转换为与int型参数相匹配。

如果我们还想支持按位操作符、逻辑操作符、关系操作符和复合赋值操作符,则要求的操作符的数目就变得非常可怕了。我们更希望的,不是提供所有的重载操作符,而是一种将SmallInt类对象自动转换成int 型对象的方式。

C++提供了一种机制,通过它,每个类都可以定义一组“可被应用在该类型对象上的转换”。对于SmallInt,我们定义了一个从SmallInt对象到int型的转换。

class SmallInt ...{

public:

SmallInt( int ival ) : value( ival ) ...{ }

// 转换操作符

// SmallInt ==> int

operator int() ...{ return value; }

// 没有提供重载操作符

private:

int value;

};

(2)需要注意的地方:

(a)转换函数必须是成员函数,它的声明不能指定返回类型和参数表。

operator int( SmallInt & ); // 错误: 不是成员

class SmallInt ...{

public:

int operator int(); // 错误: 返回类型

operator int( int = 0 ); // 错误参数表

// ...

};

(b)显式的类型转换会导致调用转换函数。(须注意在必要的时候将转换类型设置为const,只允许对被转换的类对象进行只读访问)

#include "Token.h"

Token tok( "function", 78 );

// 函数型的表示法: 调用 Token::operator SmallInt()

SmallInt tokVal = SmallInt( tok );

// static_cast: 调用 Token::operator tName()

char *tokName = static_cast< char * >( tok );

(c)如果转换的目标(本例中的double)与转换函数的类型(本例中的int类型)不完全匹配,但目标类型可以通过标准转换序列到达,则仍可调用转换函数。

extern void calc( double );

Token tok( "constant", 44 );

// 调用 tok.operator int() 吗? 是的

// int --> double 通过标准转换

calc( tok );

(d)使用构造函数作为转换函数。

extern void func( Number );

SmallInt si( 87 );

{

// 调用 Number( const SmallInt & )

func( si );

}

当然,可通过在类的构造函数前设置explicit,以禁止将其用来执行隐式转换。



来源:神秘0次

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

当下,身份认证已成为网络安全的核心基石。从移动支付到远程办公,从政务服务到工业控制,每一次网络交互都依赖于对用户身份真实性的确认。然而,密码泄露、AI换脸攻击、生物特征伪造等新型威胁,正不断挑战传统认证体系的可靠性。身份...

关键字: 计算机网络 用户

近日,中国信息通信研究院(以下简称“中国信通院”)发布了《中国5G发展和经济社会影响白皮书(2022年)》(以下简称为“白皮书”)。

关键字: 5G 用户 渗透率

智能电视,是基于Internet应用技术,具备开放式操作系统与芯片,拥有开放式应用平台,可实现双向人机交互功能,集影音、娱乐。

关键字: 智能 电视 用户

2020年,我国互联网行业实现快速发展,网民规模稳定增长。截至2020年底,我国5G网络用户数超过1.6亿,约占全球5G总用户数的89%。根据报告,截至2020年底,我国网民规模达9.89亿,互联网普及率达到70.4%。

关键字: 5G 用户 运营商

11月4日下午消息,在今日的华为开发者大会上,华为终端BG CEO余承东发表演讲。他透露,目前搭载鸿蒙OS的华为终端已超3.2亿,同比增长113%;鸿蒙智联设备超2.5亿,同比增长212%。另外,鸿蒙生态步入快车道,拥有...

关键字: 鸿蒙OS 用户 3.2亿

5G网络(5G Network)是第五代移动通信网络,其峰值理论传输速度可达20Gbps,合2.5GB每秒,比4G网络的传输速度快10倍以上。举例来说,一部1G的电影可在4秒之内下载完成。随着5G技术的诞生,用智能终端分...

关键字: 5G网络 5G移动电话 用户

在DPU概念诞生之初,人们争论它“应如何定义”,但后来发现,只有定义,还远不能说明 DPU能做什么、有什么作用、如何与现有系统更好地协同。本文将讨论DPU发展中的四个关键问题:DPU是什么?DPU可以标准化吗?DPU产业...

关键字: DPU 定义

自上世纪60年代,信息技术的飞速发展和互联网应用加速普及,在全球范围内掀起了信息革命的发展浪潮。工业革命以来,这一影响更为广泛和深远的历史变革给人类生产生活方式乃至经济社会各个领域都带来了前所未有的变化。

关键字: 5G 用户 12亿

在过去的2021年,5G不容置疑是最热门的议题和赛道,2021年是我国5G网络快速发展的一年,并已成熟化的涉足市场上的各行各业,如工业、车联网、能源、教育、医疗、智慧城市等领域。

关键字: 5G 用户 十亿

摘要:以广东韶关乳源农村偏远地区为例,探讨了农村偏远地区用户微网系统的解决方案,总结了用户微网投资相对较少、经济性能较优、建设周期相对较短的优势。

关键字: 微电网 用户 优势
关闭