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