java - 默认构造函数,Java 与 C++

标签 java c++ constructor

术语“默认构造函数”在 Java 和 C++ 中都是官方的,它在这两个世界中的含义似乎不同。请问我的理解是否正确,一些相关概念的正确命名是什么?

  1. Java 中的默认构造函数是指在没有为类定义构造函数时由编译器生成的(无参数)构造函数。

  2. 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都被正式称为默认构造函数。

我的理解正确吗?

如果是这样,一些术语问题:

  1. 不带参数的 ctor 在 Java 中的正确名称是什么? (即 J-1 和 J2)。我通常称它为 No-Arg Constructor。 (对应C++中default-ctor的概念)

  2. 编译器生成的构造函数在 C++ 中的正确名称是什么? (即C-1和C-2,加上关键字default,好像应该叫default,那应该叫“default默认构造函数”?(对应default的概念- Java 构造函数)

  3. 类似2,编译器生成的Copy-ctor、赋值运算符等应该如何调用? “默认复制构造函数”?

最佳答案

在 Java 中,两者都称为默认构造函数。 Java 编译器在内部生成不带参数的构造函数。如果您指定没有 args 的构造函数,就好像您正在覆盖构造函数。

public NoArgCtorClass() { ... }

例如,您在 { ... } 中保存的任何代码都将在您实例化对象时执行...

注意:如果你有一个重载的构造函数,你需要明确地编写默认构造函数,因为编译器在这种情况下不会生成无参数构造函数。

关于java - 默认构造函数,Java 与 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664783/

相关文章:

c++ - 如何获取自上次用户登录 Windows 以来的时间?

c++ - "A is nested class in B"是可传递的关系吗?

javascript - Node - 工厂或构造函数,还是两者都不?

PHP 在构造函数中访问属性

java - 如何使用 PixelReader 和 JavaFX 提取子图像?

java - 如果出现严重的全局错误,请停止使用 RabbitMQ 消息

c++ - 当用户尝试发送短信时获取通知

c++ - 如何为成员使用非默认构造函数?

java - java中的递归方法检测回文

java - 为什么在下面的示例中,KeyBindings(而不是 KeyListeners)检测到 ActionEvents?