Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >构造函数隐式转换_构造函数实例化对象

构造函数隐式转换_构造函数实例化对象

作者头像
全栈程序员站长
发布于 2022-11-10 07:58:06
发布于 2022-11-10 07:58:06
44800
代码可运行
举报
运行总次数:0
代码可运行

转载博客:

http://blog.csdn.net/thefutureisour/article/details/7705771

构造函数隐式转换

构造函数会引起一个不引人注意的问题: 用单个实参来调用的构造函数定义了从从形参类型到类类型的一个隐式转换。 举个例子说:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Sales_item  
{  
public:  
    std::istream& input(std::istream& in);  
    std::ostream& output(std::ostream& out);  
    inline double avg_price() const;  
    bool same_isbn(const Sales_item &rbs) const  
    {  
        return isbn == rbs.isbn;  
    }  
    Sales_item add(Sales_item& other);  
    Sales_item(const std::string &book = "7115145547"):isbn(book),units_sold(0),revenue(0.0){}  
private:  
    std::string isbn;  
    unsigned units_sold;  
    double revenue;  
};  

这个类的same_isbn函数的输入参数是这个类的类型,但是我们却可以这样调用这个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sales_item trans1;  
string null_book = "9-999-99999-9";  
trans1.same_isbn(null_book);  

这是因为Sales_item的构造函数可以是带单个实参的(也可以不带实参,因为我定义了默认实参7115145547),这时在调用trans1.same_isbn(null_book);时,就会发生类型转化:从string转换为Sales_item。建立一个临时的类的对象(一旦函数调用结束,就不能再放这个对象了)。

为了避免这个情况的发生,可以将类的构造函数声明为explicit:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
explicit Sales_item(const std::string &book = "7115145547"):isbn(book),units_sold(0),revenue(0.0){} 

这样,前面的默认类型转化就不起作用了。所以对于单形参构造函数,除非有非常明显的理由让他发生隐式类型转换,否者我们应该把它设计为explicit,防止隐式转化的发生。

当然我们总可以为转化而显示的使用构造函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
trans1.same_isbn(Sales_item(null_book));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183179.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Eclipse无法启动报An internal error occurred during:
注意:网上也有说直接把.metadata文件夹删除,这种方式只适合菜鸟,一般真正程序员eclipse里面已经加载了很多项目,把.metadata文件夹删除会导致要重新导入项目的情况,所以不推荐使用。(况且我删除后,并没有解决问题)
IT小马哥
2020/03/18
1.8K0
Myeclipse 出现An internal error occurred during 解决方案
An internal error occurred during: "Launching java.lang.NullPointerException An internal error occurred during: "Launching FarmeWork on MyEclipse Tomcat". java.lang.NullPointerException 如果出现了上述的错误按照如下的3个步骤解决: 1、首先关闭MyEclipse工作空间。 2、然后删除工作空间下的 “/.meta
用户1220053
2018/02/09
1.4K0
为什么我强烈推荐你使用 IDEA,放弃 Eclipse?
来源:https://www.cnblogs.com/ouyida3/p/9901312.html
开发者技术前线
2020/11/24
2.3K0
为什么我强烈推荐你使用 IDEA,放弃 Eclipse?
从 Eclipse 到 IDEA,金字塔到太空堡垒
工欲善其事,必先利其器。对于程序员来说,具有生产力的工具能让你事半功倍,心情大好。 两个月前从Eclipse转到了InteliJ IDEA,原先常用Eclipse如同身边的保温杯,如果不出毛病,大概我是不会考虑换掉他。中间想偶尔尝试一下IDEA,因为遇到各种不适应,就退回来了。这次要换掉Eclipse是因为一个莫名的bug导致我项目编译卡死,反复出现好几次后,决定弃用他。
芋道源码
2018/12/07
7600
从 Eclipse 到 IDEA,金字塔到太空堡垒
计算机_01_常用快捷键
         Windows+L   : 锁(look)    屏               
shirayner
2018/08/10
3130
Linux平台下的Eclipse配置
A Java Runtime Environment (JRE) or Java Development Kit (JDK)must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations: /root/eclipse-jee-neon-2/jre/bin/java java in your current PATH
程裕强
2022/05/06
1.3K0
Linux平台下的Eclipse配置
Myeclipse错误集锦
Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project 'myf'. java.lang.NullPointerException
WindCoder
2018/09/20
9360
关于tomcat一些启动错误的解决方法
进入Eclipse的工作空间 .metadata.plugins\org.eclipse.wst.server.core目录,修改目录内文件server.xml 找到 start-timeout=”45” 并设高 start-timeout=”450”
格姗知识圈
2019/07/19
1.6K0
MyEclipse详解以及MyEclipse7.5的优化
     转自:http://www.oecp.cn/hi/yongtree/blog/348(请点这里看原文)
大数据工程师-公子
2019/03/14
1K0
idea与eclipse项目相互导入的过程
很简单,直接去项目所在目录考出即可,但是考出的项目往往都特别大,这是因为考出之前  我们不要忘记把idea的输出目录删除
Twcat_tree
2022/11/30
1.8K0
idea与eclipse项目相互导入的过程
Maven实战之旅第五篇——使用eclipse创建maven项目
前面我们已经讲解了使用maven的archetype插件来手动创建maven项目,通过动手操作我们可以直观的感受到这种方式效率低下,还有点儿麻烦。实际上现在很多IDE已经支持maven插件,只要在IDE中装上maven插件,我们就能够简单快速的创建maven项目。下面来教大家如何使用eclipse创建maven项目。至于如何在eclipse中配置maven插件,大家可以看看我前面的那两篇文章。 Maven实战之旅第二篇——配置maven Maven实战之旅第三篇——eclipse安装maven插件
我是李超人
2020/08/20
2.1K0
Eclipse问题汇总
第一次遇到这种错误,百度了下,原来是因为Eclipse默认把访问受限的API设置成了Error级别,所以才会编译报错。
雨临Lewis
2022/01/12
1.5K0
基于Eclipse 2020的MyEclipse,支持Java14,升级框架,STS4集成
在这一版的MyEclipse中,升级了框架支持;Hibernate、JPA、Spring框架的项目的创建引导升级到了Hibernate 5.4、JPA 2.2和Spring 5.2;也就是说通过MyEclipse创建的maven项目,可以将项目框架最高依赖Hibernate 5.4、JPA 2.2和Spring 5.2自动添加到项目的pom文件中。
老夫编程说
2020/05/29
1.1K0
基于Eclipse 2020的MyEclipse,支持Java14,升级框架,STS4集成
IntelliJ IDEA 使用技巧大全,速度收藏!
如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着近期的不断开发实践和调试,逐步体会到这款智能IDE带来的巨大开发便利,在强大的插件功能支持下,诸如对Git和Maven的支持简直让人停不下来,各种代码提示,包括JS更是手到擒来,最终不得不被这款神奇的IDE所折服。为了让身边更多的小伙伴参与进来,决定写下这篇文章,与君共享。(*^_^*)
用户5224393
2019/06/05
1.1K0
IntelliJ IDEA 使用技巧大全,速度收藏!
Eclipse 答疑:Eclipse 启动失败/无响应?loading workbench 闪退?解决方式汇总
Eclipse 作为最好的开发工具之一,深受广大开发者的青睐,然而在使用过程中也有小伙伴频繁遇到 Eclipse 启动无响应,loading workbench 闪退的问题,导致启动无响应的原因有很多,在我整理具体分析之后,将其归纳为以下几种情况,下文将一一详细介绍,如果你在开发中遇到了“出人意料”的问题,欢迎投稿,在本文中我们也将持续进行补充。
白鹿第一帅
2022/04/13
4.1K0
Eclipse 答疑:Eclipse 启动失败/无响应?loading workbench 闪退?解决方式汇总
Eclipse使用入门教程
说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率。因此本篇博文,笔者只是针对刚刚入门java的新手,以便他们能尽快掌握Eclipse的使用。
后端码匠
2020/11/18
1.5K0
如何禁用不必要的启动项以加快开机速度?
是山河呀
2025/02/22
1520
Java基础--Eclipse使用Java基础--JDK的安装和配置
  Eclipse是JavaWeb开发最常用的工具,下面详细介绍一下如何下载安装最新版Eclipse。本文eclipse的使用是在JDK安装配置完成的基础上进行的,否则Eclipse安装后可能无法运行程序。JDK的安装配置可以参考文章:Java基础--JDK的安装和配置
mukekeheart
2019/09/29
9720
Java基础--Eclipse使用Java基础--JDK的安装和配置
Eclipse 使用小结
代码智能提示 Java智能提示 Window -> Preferences -> Java -> Editor -> Content Assist -> Auto Activation delay是自
静默虚空
2018/01/05
1.1K0
Eclipse 使用小结
Eclipse 安装插件报错:An error occurred while collecting items to be installed session context was...解决方法汇总
Eclipse 为我们在开发中必不可缺的 IDE,熟悉 Eclipse 的开发与应用可以让我们在项目中事半功倍。但是如果我们在使用过程中,比如使用 Eclipse 安装内置插件时,或者是插件更新时报错,我们该如何解决呢?本文就 Eclipse 的此类报错做了汇总。
白鹿第一帅
2022/05/08
4.1K0
Eclipse 安装插件报错:An error occurred while collecting items to be installed session context was...解决方法汇总
推荐阅读
相关推荐
Eclipse无法启动报An internal error occurred during:
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验