最新要闻
- 不是“空中楼阁”:努比亚Pad 3D搭载全球最大Leia 3D内容生态
- 【报资讯】男子车停路边去吃烧烤 回来瞬间崩溃:路边已装上护栏
- 【独家焦点】作文游西湖300字(精选40篇)
- 千里托运奔驰GLC被淋满牛粪 女子崩溃:花1900元洗了5遍
- 【世界速看料】情侣打车3小时后跑单拉黑司机 司机:246元车费没了
- 世界资讯:微软承认向无法升级的设备推荐Win11:已进行修复
- 环球即时:压水堆
- 当前滚动:这些“领导”短信收到没?专门针对iPhone用户诈骗:全国多地预警
- 环球精选!王一博、梁朝伟《无名》北美院线扩映!豆瓣降至6.7分
- 当前简讯:大爷怒斥夜市挂日本元素油纸伞:主办方回应令人不解
- 环球头条:导演新海诚:中国动画电影迟早会超过日本
- 天天热文:开办以来首位!跨性别演员柏林电影节获奖
- 微速讯:长城放出王炸?长城水平对置八缸发动机摩托曝光 真猛兽
- 环球热头条丨可以两天一充的骁龙8 Gen2手机:出现了
- 每日热讯!马里肯涅巴地区发生武装抢劫 中使馆提醒关注当地安全情况
- 威马汽车再发内部信:部分员工复工 其余人员无薪休假
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
59.类的自动转换和强制类型转换
程序清单11.16 stonewt.h
#pragma once//stone.h -- Stonewt类声明#ifndef STONEWT_H_#define STONEWT_H_class Stonewt{private:enum {Lbs_per_stn = 14};//pounds per stoneint stone;//whole stonedouble pds_left;//fractional poundsdouble pounds;//enrire weight in poundspublic:Stonewt(double lbs);//constructor for double poundsStonewt(int stn, double lbs);//constructor for stone, lbsStonewt();//default constructor~Stonewt();void show_lbs() const;//show weight in pounds formatvoid show_stn() const;//show weight in stone format};#endif
说明:这个类并非真的需要声明析构函数,因为自动生成的默认构造函数就很好。另外,提供显示的声明可以为以后做好准备,以防必须定义构造函数。
(资料图片)
程序清单11.17 stonewt.cpp
#pragma warning(disable:4996)#define _CRT_SECURE_NO_WARNINGS 1//stone.cpp -- Stonewt methods#include using std::cout;#include "stonewt.h"//construct Stonewt object from double valueStonewt::Stonewt(double lbs)//constructor for double pounds{stone = int(lbs) / Lbs_per_stn;pds_left = int(lbs) % Lbs_per_stn + lbs - int(lbs);pounds = lbs;}Stonewt::Stonewt(int stn, double lbs)//constructor for stone, lbs{stone = stn;pds_left = lbs;pounds = stn * Lbs_per_stn + lbs;}Stonewt::Stonewt()//default constructor, wt = 0{stone = pounds = pds_left = 0;}Stonewt::~Stonewt(){}void Stonewt::show_lbs() const//show weight in pounds format{cout << pounds << " pounds\n";}void Stonewt::show_stn() const//show weight in stone format{cout << stone << " stone, " << pds_left << " pounds\n";}
因为Stonewt对象表示一个重量,所以可以提供一些整数或浮点值转换为Stonewt对象的方法。在C++中,接受一个参数的构造函数支持将类型与该参数相同的值转换为类。下面的构造函数用于将double类型的值转换为Stonewt类型:
Stone(double lbs);
也就是说,可以编写这样的代码:
Stonewt myCat;//创建一个Stonewt对象myCat = 19.6;//使用Stonewt(double)将19.6转换为Stonewt
程序员将使用构造函数Stonewt(double)来创建一个临时Stonewt对象,并将19.6作为初始化值。随后,采用逐成员赋值方式将该临时对象的内容复制到myCat中。这一过程称为隐式转换,因为它是自动进行的,而不需要显式强制类型转换。
只接受一个参数的构造函数才能作为转换函数。下面的构造函数有两个参数,因此不能用来转换类型:
Stonewt(int stn, double lbs);
然而,如果给第二个参数提供默认值,它便可以用于转换int:
Stonewt(int stn, double lbs = 0);
有时会导致意外的类型转换。因此,C++新增了关键字explicit,用于关闭这种自动类型。也就是说,可以这样声明构造函数:
explicit Stonewt(double lbs);
这将关闭上述示例的隐式转换,但仍然可以显示强制类型转换:
Stonewt myCat;myCat = 19.6;mycat = Stonewt(19.6);mycat = (Stonewt) 19.6;
注意:只接受一个参数的构造函数定义了从参数类型到类类型的转换。如果使用关键字explicit限定了这种构造函数,则它只能用于显式转换,否则也可以用于隐式转换。
编译器将使用Stonewt(double)函数的时机
如果在声明中使用了关键字explicit,则Stonewt(double)将只用于显式强制类型转换,否则还可以用于下面的隐式转换。
●将stonewt对象初始化为double值时
●将double值赋值给Stonewt对象时
●将double传递给接受Stonewt参数的函数时
●返回值被声明为Stonewt的函数试图返回double值时
●在上述任意一种情况下,使用可转换为double类型的内置类型时
当且仅当转换不存在二义性时,才会进行这种二步转换。
程序清单11.18 stone.cpp
#pragma warning(disable:4996)#define _CRT_SECURE_NO_WARNINGS 1//stone.cpp -- 用户定义版本//和stonewt.cpp联合编译#include using std::cout;#include "stonewt.h"void display(const Stonewt& st, int n);int main(){Stonewt incognito = 275;//使用构造函数初始化Stonewt wolfe(285.7);//等价于Stonewt wolfe = 285.7;Stonewt taft(21, 8);cout << "The celebrity weighed ";incognito.show_stn();cout << "The decetive weighed ";wolfe.show_stn();cout << "The President weighed ";taft.show_lbs();incognito = 276.8;//使用构造函数转换taft = 325;//等价于taft = Stonewt(325);cout << "After dinner, the celebrity weighed ";incognito.show_stn();cout << "After dinner, the President weighed ";taft.show_lbs();display(taft, 2);cout << "The wrestler weighed even more.\n";display(422, 2);cout << "No stone left unearned\n";system("pause");return EXIT_SUCCESS;}void display(const Stonewt& st, int n){for (int i = 0; i < n; i++){cout << "Wow! ";st.show_stn();}}
输出:
The celebrity weighed 19 stone, 9 poundsThe decetive weighed 20 stone, 5.7 poundsThe President weighed 302 poundsAfter dinner, the celebrity weighed 19 stone, 10.8 poundsAfter dinner, the President weighed 325 poundsWow! 23 stone, 3 poundsWow! 23 stone, 3 poundsThe wrestler weighed even more.Wow! 30 stone, 2 poundsWow! 30 stone, 2 poundsNo stone left unearned请按任意键继续. . .
程序说明:
当构造函数只接受一个参数时,可以使用下面的格式来初始化类对象:
Stonewt incognito = 275;
这等价于前面介绍过的另外两种格式:
Stonewt incognito(275);Stonewt incognito = Stonewt(275);
接下来,请注意程序清单11.18的下面两条语句:
incognito = 276.8;taft = 325;
第一条赋值语句使用接受double参数的构造函数,将276.8转换为一个Stonewt值,这将incognito的pound成员设置为276.8。因为该语句使用了构造函数,所以还将设置stone和pds_left成员。同样,第二条赋值语句将一个int值转换为double类型,然后使用Stonewt(double)来设置全部3个成员。
注意:
display(422, 2);
display()原型表示,第一个参数是Stone对象(Stonewt 和Stonewt &形参都与Stonewt实参匹配)。遇到int参数时,编译器查找构造函数Stonewt(int),以便将该int值转换为Stonewt类型。没找到,于是匹配率Stonewt(double)。
-
59.类的自动转换和强制类型转换
程序清单11 16stonewt h pragmaonce stone h--Stonewt类声明 ifndefSTONEWT_H_ defineSTONEWT_H_class
来源: 59.类的自动转换和强制类型转换
不是“空中楼阁”:努比亚Pad 3D搭载全球最大Leia 3D内容生态
【报资讯】男子车停路边去吃烧烤 回来瞬间崩溃:路边已装上护栏
【独家焦点】作文游西湖300字(精选40篇)
千里托运奔驰GLC被淋满牛粪 女子崩溃:花1900元洗了5遍
【世界速看料】情侣打车3小时后跑单拉黑司机 司机:246元车费没了
世界资讯:微软承认向无法升级的设备推荐Win11:已进行修复
环球即时:压水堆
当前滚动:这些“领导”短信收到没?专门针对iPhone用户诈骗:全国多地预警
环球精选!王一博、梁朝伟《无名》北美院线扩映!豆瓣降至6.7分
当前简讯:大爷怒斥夜市挂日本元素油纸伞:主办方回应令人不解
环球头条:导演新海诚:中国动画电影迟早会超过日本
天天最资讯丨pat乙级链表问题
LWIP学习记录------ARP协议(1)
天天热文:开办以来首位!跨性别演员柏林电影节获奖
微速讯:长城放出王炸?长城水平对置八缸发动机摩托曝光 真猛兽
环球热头条丨可以两天一充的骁龙8 Gen2手机:出现了
每日热讯!马里肯涅巴地区发生武装抢劫 中使馆提醒关注当地安全情况
威马汽车再发内部信:部分员工复工 其余人员无薪休假
【全球热闻】视觉四边等宽!魅族20系列边框仅1.57mm:比iPhone 14 Pro都窄
全球热点!Go编程实战:博客备份
Markdown简明教程
《使命召唤》前景动荡
世界新资讯:上海一高校推出高启强同款猪脚面:师生直呼“舌尖上的《狂飙》”
乌苏啤酒大促:立减64元 折合3元/瓶到手
信息:女子考研期间生娃初试395分 回应外界好奇:多亏家人替自己分担很多
每日焦点!高德、百度地图红绿灯读秒很神奇 接入交管平台?真相并非如此
【天天新要闻】《我们的日子》里,不要忽视这些法律问题
天天资讯:俄州“毒火车”引发环境灾难后 美国又一货运列车脱轨
中兴通
全球热讯:读Java性能权威指南(第2版)笔记02_ Java SE API技巧上
世界动态:你昨晚关注的那个福利姬 可能是假的
世界即时看!国产新能源疯狂内卷!哈弗H6 PHEV官降1.5万 配置全系顶配
【世界报资讯】iPhone 15 Pro Max渲染图出炉:对比14 Pro Max边框更窄、机身更厚
对接水仙后台(支持AndLua+、FA、FA2、AIDE lua、Simple Lua等)
【全球报资讯】Golang基于Mysql分布式锁实现集群主备
世界观热点:薪资4K-5K!公司招聘财务要求做饭被吐槽像保姆
天天百事通!男子长期高血糖导致视网膜病变:不可逆
热头条丨不愧是万元机皇!酷安网友给三星Galaxy S23 Ultra打最高分
当前聚焦:《蚁人3》上映9天中国内地票房破2亿 网友:回到小众也挺好
世界微资讯!如何给公众号投稿赚钱_怎样给公众号投稿赚钱
双亲委派机制
天天微动态丨中国教师队伍建设研究/京师教师教育论丛
当前视讯!即将让核污水倒入大海!日本港口大量有毒海胆聚集 或出现爆发式增长
三星降低QD-OLED面板成本!让电视更具竞争力
世界关注:努比亚Z50新版下周首销:骁龙8 Gen2旗舰焊门员 性价比无敌
最新:python实现客户端和服务端的UDP相互通信
【报资讯】hbuilderx打正式包所需的私钥证书的创建方法
全球新动态:2.【go-kit教程】go-kit启动http服务
室内单目深度估计-4
最新:kaggle中训练得到的output太大该怎么下载?
世界热消息:2消息,中超新贵签约32岁国脚,5中超外援上诉国际足联
环球新动态:超市宣称1元纸币将退出历史引热议 网友直呼太突然:官方回应不属实
视点!女子患异食癖3年吃上百块粉饼:体检身体无异常
天天热点!刷题疑问
环球速读:史上最好的真全面屏手机!努比亚Z50 Ultra上架接受预约
天天精选!禁止自带食材 关停300家店 海底捞从巨亏41亿到盈利13亿
天天讯息:day04-原生的API&注解方式
【环球新要闻】Git使用
美食博主三亚买3888元海鲜被好心人提醒多花1700:当事人心累
热消息:秋裤先别着急脱!“春捂”到底该“捂”哪儿?
前沿资讯!2023年安卓之光!小米13 Ultra手机壳曝光:背部造型抢眼
餐馆接到网吧10个外卖订单 结果被刷9个差评 店主:下次亲自送餐
天天微速讯:门店2299元 GXG男士羊毛大衣0.8折清仓大促:实付199元!
世界热资讯!乐堡苏打气泡酒12罐到手19.9元:低糖0脂无负担
威马员工在线讨薪:被恶心到了、恶心的事还有更多
广州塞车登“热搜”?“甜蜜的烦恼”重回一线城市,中国经济活力加快恢复
【Tire树】高效统计字符串
80、90后泪目 国产暗黑《赵云传重制版》试玩
1岁男童误食降糖药成植物人:愿康复顺利
环球速看:中央人民广播电台民族节目中心
Ubuntu安装Zabbix6.0
秒睡令人羡慕?医生提醒:可能是种睡眠障碍
《流浪地球2》科幻成真?武汉国博用特效“加建”太空电梯
今头条!【element UI】在 el-select 与 el-tree 结合组件
环球热文:python教程:模块的搜索路径
Python中模块的四种方式
《原子之心》种族主义漫画引争议:涉嫌歧视黑人!官方道歉
世界速读:我国载人航天将对国际开放 多国航天员希望参与中国空间站
每日热讯!驱动拖后腿 Intel显卡被低估:2000元档A770理论可刚RTX 3070
受贿、泄露内幕信息!湖北原副省长曹广晶被公诉
天天快看点丨下周发售!《卧龙:苍天陨落》新预告发布:PC/主机通吃
最新消息:EQ电动车中国表现欠佳 奔驰CEO:打价格战不是好事
环球热点!101岁老人每天赶2场麻将 医生:身体状态70岁
What's past is prologue
全球新资讯:车商不收特斯拉 新车一个月亏7万:新能源二手车都不受待见 厂商频降价
H5N1禽流感致死事件引世卫关注:事发柬埔寨、9年来首次
环球热点评!下单就送鲜蔬汤 海福盛冻干粥5杯大促:券后仅20.9元!
“真香定律”稳定发挥 迈凯伦全新SUV效果图曝光:预计售价282万
世界今日讯!关于修订《中国高尔夫球协会赛事活动管理办法》的通知
环球微头条丨中越边境民族文化艺术考察研究
每日热点:女子在门缝发现针头 是大妈拿注射器推大量不明液体:整栋楼遭殃 网友气愤
地球中心到底有什么?科学家发现竟是一个超大铁球 跟书里讲得不一样
NET6接口项目基础框架项目
Java 8 Lambda 方法引用 简记
全球看热讯:(数据库系统概论|王珊)第七章数据库设计-第三节:概念结构设计
Blender插件:水滴生成器(Droplet Generator)
环球速递!《分布式技术原理与算法解析》学习笔记Day22
消炎止血、除口臭!中药黄芩牙膏大促:3支不到20块(送牙刷)
【世界聚看点】《博德之门3》Xbox版遭遇技术难题