Adr*_*hum 6 c++ java constructor
术语"默认构造函数"在Java和C++中都是官方的,在这两个世界中它似乎意义不同.我是否知道我的理解是否正确以及某些相关概念的正确命名是什么?
Java中的默认构造函数表示当没有为类定义构造函数时由Compiler生成的(No-arg)构造函数.
C++中的默认构造函数表示可以不带参数调用的构造函数.
给出以下示例
Java的:
class NoCtorClass {
// No ctor defined, compiler is generating one --------- J-1
}
class NoArgCtorClass {
public NoArgCtorClass() { ... } -------------------------- J-2
}
Run Code Online (Sandbox Code Playgroud)
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) {....}
Run Code Online (Sandbox Code Playgroud)
在Java中,只有J-1被正式称为默认构造函数,而J-2则不是.
在C++中,所有C-1到C-4都被正式称为默认构造函数.
我的理解是否正确?
如果是这样,术语中的一些问题:
对于没有参数的ctor,Java中的正确名称是什么?(即J-1和J2).我通常称之为No-Arg Constructor.(对应于C++中default-ctor的概念)
C++中编译器生成的ctor的正确名称是什么?(即C-1和C-2.使用关键字default,它似乎应该被称为默认值.那么它应该被称为"默认默认构造函数"吗?(对应于Java中default-ctor的概念)
与2类似,我们应该如何调用编译器生成的Copy-ctor,赋值运算符等?"默认拷贝构造"?
在 java 中,两者都称为默认构造函数。Java 编译器在内部生成不带参数的构造函数。如果您指定不带 args 的构造函数,则就像您正在覆盖构造函数一样。
public NoArgCtorClass() { ... }
Run Code Online (Sandbox Code Playgroud)
例如,当您实例化对象时,您保留在 { ... } 中的任何代码都会被执行...
注意:如果您有重载的构造函数,则需要显式编写默认构造函数,因为在这种情况下编译器不会生成无参数构造函数。
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |