#include <iostream>
using namespace std;
class Test{
private:
Test(int a, int b=0)
{
cout << "private constructor\n";
}
public:
Test(int a)
{
cout << "public constructor\n";
}
};
int main()
{
Test t(1);
}
test.cpp: In function ‘int main()’:
test.cpp:20:10: error: call of overloaded ‘Test(int)’ is ambiguous
Test t(1);
^
test.cpp:12:2: note: candidate: Test::Test(int)
Test(int a)
^
test.cpp:7:2: note: candidate: Test::Test(int, int)
Test(int a, int b=0)
^
test.cpp:5:7: note: candidate: Test::Test(const Test&)
class Test{
^
test.cpp:20:7: error: call to constructor of 'Test' is ambiguous
Test t(1);
^ ~
test.cpp:7:2: note: candidate constructor
Test(int a, int b=0)
^
test.cpp:12:2: note: candidate constructor
Test(int a)
^
test.cpp:5:7: note: candidate is the implicit copy constructor
class Test{
^
1 error generated.
根据标准,由于明确的原因,它是模棱两可的:
[class.access/5]
应该注意的是,受控制的是对成员和基类的访问,而不是它们的可见性。成员的名称仍然可见,当这些成员和基类不可访问时,仍然考虑对基类的隐式转换。对给定构造的解释是不考虑访问控制而建立的。如果建立的解释使用不可访问的成员名称或基类,则构造格式不正确。
int const default_b = 0;
// ...
return Test{a, default_b};
为什么java编译器在类包含任何参数化构造函数时不提供默认构造函数。
问题内容: 如果一个类包含一堆静态方法,为了确保没有人错误地初始化该类的实例,我做了一个私有的构造函数: 现在..鉴于无法看到构造函数,该如何进行测试?可以测试吗? 问题答案: 使用反射,您 可以 调用私有构造函数: 但是,您甚至可以做到这一点: 通过在构造函数中引发异常,可以防止所有尝试。 我也会自己上课,因为“因为”:
//模块 //组件 `//预登录Presenter //预物流活动` //在一次创建中 //错误日志 错误:(18,53)错误:找不到符号类DaggerPresentComponent错误:(19,53)错误:找不到符号类DaggerUserLoginComponent错误:(19,10)错误:gorick.gradesprojectandroid.MVP. Presenter. Presente
本文向大家介绍解析C#中的私有构造函数和静态构造函数,包括了解析C#中的私有构造函数和静态构造函数的使用技巧和注意事项,需要的朋友参考一下 私有构造函数 私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。例如: 声明空构造函数可阻止自动生成默认构造函数。注意,如果您不对构造函数使用访问
问题内容: 为什么将只有私有构造函数的类标记为final是一个好习惯?我的猜测是,要让其他程序员知道它不能被子类化。 问题答案: 将类定为final具有一些(小的)性能提升,因为JIT编译器可以内联该类的功能。我不知道这是否符合“良好做法”的要求,但是我看到了好处。
问题内容: 在Java中,在抽象类中使用私有构造函数的目的是什么? 在一个评论中,我得到了这个问题,我很好奇,在什么情况下我们需要以这种方式使用构造函数? 我认为它可以与抽象类中的另一个构造函数一起使用,但这非常简单。它也可以用于构造将超过抽象类的静态内部类。 也许还有更优雅的用法? 问题答案: 如果构造函数是类的 唯一 构造函数,则原因很明确:防止子类化。一些类仅充当静态字段/方法的持有者,而不