术语“默认构造函数”在 Java 和 C++ 中都是官方的,它在这两个世界中的含义似乎不同。请问我的理解是否正确,一些相关概念的正确命名是什么?
Java 中的默认构造函数是指在没有为类定义构造函数时由编译器生成的(无参数)构造函数。
C++ 中的默认构造函数是指可以不带参数调用的构造函数。
给定以下示例
Java:
class NoCtorClass {
// No ctor defined, compiler is generating one --------- J-1
}
class NoArgCtorClass {
public NoArgCtorClass() { ... } -------------------------- J-2
}
C++:
class NoCtorClass {
// implicitly NoCtorClass() constructor is provided -------- C-1
}
class DefaultCtorClass {
public:
// Explicitly telling compiler to give the default one
DefaultCtorClass() = default; ---------------------------- C-2
}
class NoArgCtorClass {
public:
NoArgCtorClass(); ----------------------------------------- C-3
}
NoArgCtorClass::NoArgCtorClass() {....}
class NoArgCtor2Class {
public:
NoArgCtor2Class(int i = 0); -------------------------------- C-4
}
NoArgCtor2Class::NoArgCtor2Class (int i = 0) {....}
在Java中,只有J-1被正式称为默认构造函数,而J-2则不是。
在C++中,所有的C-1到C-4都被正式称为默认构造函数。
我的理解正确吗?
如果是这样,一些术语问题:
不带参数的 ctor 在 Java 中的正确名称是什么? (即 J-1 和 J2)。我通常称它为 No-Arg Constructor。 (对应C++中default-ctor的概念)
编译器生成的构造函数在 C++ 中的正确名称是什么? (即C-1和C-2,加上关键字
default
,好像应该叫default,那应该叫“default默认构造函数”?(对应default的概念- Java 构造函数)类似2,编译器生成的Copy-ctor、赋值运算符等应该如何调用? “默认复制构造函数”?
最佳答案
在 Java 中,两者都称为默认构造函数。 Java 编译器在内部生成不带参数的构造函数。如果您指定没有 args 的构造函数,就好像您正在覆盖构造函数。
public NoArgCtorClass() { ... }
例如,您在 { ... } 中保存的任何代码都将在您实例化对象时执行...
注意:如果你有一个重载的构造函数,你需要明确地编写默认构造函数,因为编译器在这种情况下不会生成无参数构造函数。
关于java - 默认构造函数,Java 与 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664783/