- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
cprimer学习笔记2
?
C++Primer PLus 第五版读书笔记2
分类:?IT书籍读书笔记2012-08-27 16:46?1019人阅读?评论(0)?收藏?举报
c++读书deleteiosstring
类的自动转换和强制类型转换1)如果构造函数中含有类似的拷贝函数:
CStonewt( double lbs ){?m_nStone = int( lbs ) / Lbs_per_stn;?m_fPds_left = int( lbs ) % Lbs_per_stn + lbs - int( lbs );?m_fPounds = lbs;}
那么使用CStonewt myCat;myCat = 19;程序将使用构造函数CStonewt( double lbs )来创建一个临时的CStonewt对象,并将19.6作为初始值。随后,采用逐成员赋值方式将该临时对象的内容赋值到myCat中(比如m_nStone = int(
lbs ) / Lbs_per_stn;)。这一过程称为隐式转换,因为他是自动进行的,而不需要显示强制类型转换。如果换成CStonewt( double lbs, int i )有两个参数,因此不能用来转换类型。
[cpp]?view plaincopyprint?
#include?stdafx.h??
#include?iostream??
using?namespace?std;??
??
namespace??
{??
????class?CStonewt??
????{??
????public:??
????????CStonewt(?double?lbs?)??
????????{??
????????????m_nStone?=?int(?lbs?)?/?Lbs_per_stn;??
????????????m_fPds_left?=?int(?lbs?)?%?Lbs_per_stn?+?lbs?-?int(?lbs?);??
????????????m_fPounds?=?lbs;??
????????}??
????????CStonewt(?int?stn,?double?lbs?)??
????????{??
????????????m_nStone?=?stn;??
????????????m_fPds_left?=?lbs;??
????????????m_fPounds?=?stn?*?Lbs_per_stn?+?lbs;??
????????}??
????????CStonewt()??
????????{??
????????????m_nStone?=?m_fPounds?=?m_fPds_left?=?0;??
????????}??
????????~CStonewt()??
????????{??
??
????????}??
????????void?show_lbs()?const??
????????{??
????????????cout??m_nStone???stone??m_fPds_left???pound\n??endl;;??
????????}??
????????void?show_stn()?const??
????????{??
????????????cout??m_fPounds???pound\n??endl;????
????????}??
????private:??
????????enum?{?Lbs_per_stn?=?14?};??
????????int?m_nStone;??
????????double?m_fPds_left;??
????????double?m_fPounds;??
????};??
}??
??
int?_tmain(int?argc,?_TCHAR*?argv[])??
{??
????CStonewt?myCat;??
????myCat?=?19;??
??
????return?0;??
}??
?
2)将构造函数用作自动类型转换函数似乎是一项不错的特性。不过,当程序员拥有更丰富的C++经验时,将发现这种自动也行并非总是合乎需要的,因为这会导致意外的类型转换。因此,最新
的C++实现新增了一个关键字(explicit),用来关闭这种自动特性。也就是说,可以这样声明构造函数:
[cpp]?view plaincopyprint?
explicit?CStonewt(?double?lbs?)??
{??
????m_nStone?=?int(?lbs?)?/?Lbs_per_stn;??
????m_fPds_left?=?int(?lbs?)?%?Lbs_per_stn?+?lbs?
原创力文档


文档评论(0)