c++ - 两个默认构造函数,一个是公共的,一个是私有的
问题描述
我的问题是关于 OOP(C++)中的构造函数。当我将类中的默认构造函数定义为私有时,并且当我在 main 中将该类的对象初始化为默认值时,会发生默认构造函数不可访问的错误。没关系。但是随后我还在 Public 部分创建了默认参数构造函数,当我再次在 main 中初始化对象时,就会发生对函数重载的模棱两可的调用。所以我的问题是,如果不能从 main 访问私有构造函数,那么编译器应该在 public 部分调用构造函数,这是默认参数构造函数。请回答为什么会这样。
解决方案
是否允许程序的某些范围访问函数和/或实例化类类型由编译器在执行重载决议后决定。这意味着可用的构造函数不会被它们的private
或public
可见性“过滤”。
在您的场景中,在查看main
函数时这可能没有立即意义,您似乎从中实例化了相关类的对象。但是想象一下,您使用该类的成员函数创建该类的实例:在这里,private
和public
成员都是可见的,编译器将无法决定它应该采用哪一个。
作为旁注,如果您不希望您的类由默认 ctor 创建,请更喜欢= delete
它。此外,一个默认构造函数和一个具有默认单个参数的构造函数当然可以重构为两个构造函数,例如使用类内初始化程序。
推荐阅读
- javascript - 如何在包含对象的反应js中映射数组?
- java - 尝试从响应正文上的关闭流中读取
- python - 我怎么知道列表中有哪些元素?
- microsoft-graph-api - Teams Bot SDK 无法使用频道对话更新参考获取团队信息
- bash - 带有保留字符的 Bash 插值问题
- android - 如何在可通过 App Wrapping 配置的 Xamarin Android 应用中创建设置
- python - Pyodbc + SQLA - 通信链路故障
- angular - 如何将 Firebase 查询快照转换为对象数组
- ios - iOS - 在 SwiftUI 中将键盘按键检测为字符串
- c# - 如何将文本文件转换为字典
?