缺省构造函数
缺省构造函数又叫默认构造函数,英文名称default constructor,是当声明对象的时候,编译器会调用的一个构造函数。
在计算机编程语言中,缺省构造函数可以指编译器在没有任何程序员定义的构造函数(例如Java)的情况下自动生成的构造函数,通常是无用的构造函数。 在其他语言中(例如在C ++中),无论构造函数是自动生成的还是用户定义的,它都是可以调用的构造函数,无需提供任何参数。 请注意,如果在构造函数的定义中提供了默认参数,那么带有形参的构造函数仍然可以不带参数地被调用。
- 中文名 缺省构造函数
- 外文名 default constructor
C++
在C ++中,该标准将类的默认构造函数描述为可以不带任何参数调用的构造函数(其中包含一个构造函数,其参数都具有缺省参数)。 例如 :
当动态分配内存时,可以通过在类名后添加括号来调用构造函数。 从某种意义上说,这是对构造函数的显式调用:
如果构造函数确实有一个或多个参数,但它们都有默认值,那么它仍然是一个默认的构造函数。 请记住,每个类最多可以有一个默认构造函数,其中一个没有参数,或者所有参数都有默认值的构造函数,比如在这种情况下:
在C ++中,默认构造函数非常重要,因为它们在某些情况下会自动调用;因此,在这些情况下,类没有默认构造函数是错误的:
当没有参数列表(例如:MyClass x;)或者没有参数列表(例如:new MyClass;或new MyClass();)动态分配对象值时,MyClass的默认构造函数用于初始化对象。
当声明一个对象数组时,例如MyClass x ;;或动态分配,例如,新的MyClass。 MyClass的默认构造函数用于初始化所有元素。
当派生类构造函数未在其初始化程序列表中显式调用基类构造函数时,将调用基类的默认构造函数。
当类构造函数没有在其初始化列表中明确调用其某个对象值域的构造函数时,将调用该字段类的默认构造函数。
在标准库中,当没有明确给定值时,某些容器使用默认构造函数"填充"值。例如。向量<MyClass的>(10);用10个元素初始化矢量,这些元素用默认构造的MyClass对象填充。
如果一个类没有明确定义的构造函数,编译器会隐式声明并为其定义一个默认的构造函数。这个隐式定义的默认构造函数等价于一个空体明确定义的构造函数。例如:
如果构造函数是为一个类明确定义的,但它们都是非默认的,编译器将不会隐式地定义一个默认构造函数,从而导致类没有默认构造函数的情况。 这是典型错误的原因,如下例所示。
由于程序员和编译器都没有定义默认的构造函数,因此由p指向的对象的创建会导致错误。
另一方面,在C ++ 11中,可以显式创建一个默认构造函数:
Java和C#
在Java和C#中,"默认构造函数"指的是如果没有为该类定义构造函数,那么编译器会自动生成一个空构造函数。 默认构造函数隐式调用超类的空构造函数,然后执行一个空体。 所有字段的初始值都为0(整数类型),0.0(浮点类型),false(布尔类型)或null(引用类型)。 一个不带参数的程序员定义的构造函数在C#中也被称为默认构造函数,但不是在Java中。