首页 > 解决方案 > 两个默认构造函数,一个是公共的,一个是私有的

问题描述

我的问题是关于 OOP(C++)中的构造函数。当我将类中的默认构造函数定义为私有时,并且当我在 main 中将该类的对象初始化为默认值时,会发生默认构造函数不可访问的错误。没关系。但是随后我还在 Public 部分创建了默认参数构造函数,当我再次在 main 中初始化对象时,就会发生对函数重载的模棱两可的调用。所以我的问题是,如果不能从 main 访问私有构造函数,那么编译器应该在 public 部分调用构造函数,这是默认参数构造函数。请回答为什么会这样。

标签: c++oopoverloadingaccess-specifierconstructor-overloading

解决方案


是否允许程序的某些范围访问函数和/或实例化类类型由编译器在执行重载决议后决定。这意味着可用的构造函数不会被它们的privatepublic可见性“过滤”。

在您的场景中,在查看main函数时这可能没有立即意义,您似乎从中实例化了相关类的对象。但是想象一下,您使用该类的成员函数创建该类的实例:在这里,privatepublic成员都是可见的,编译器将无法决定它应该采用哪一个。

作为旁注,如果您不希望您的类由默认 ctor 创建,请更喜欢= delete它。此外,一个默认构造函数和一个具有默认单个参数的构造函数当然可以重构为两个构造函数,例如使用类内初始化程序。


推荐阅读