将执行哪个构造函数
Which constructor will be executed?
在这里,声明了一个参数化的构造函数,但不会创建与该构造函数对应的对象。但是输出是 10 20,这是参数化构造函数的执行,为什么?
#include<iostream>
using namespace std;
class constructor
{
int x, y;
public:
constructor(int a = 10, int b = 20 )
{
x = a;
y = b;
}
void Display()
{
cout<< x << " " << y << endl;
}
};
int main()
{
constructor objBix;
objBix.Display();
return 0;
}
由于您已经定义了具有所有默认参数的自定义构造函数,因此它将用作默认构造函数。编译器不会生成另一个默认函数,因为这会在决定调用哪个函数时产生歧义。因此,实际调用的是使用所有默认参数的自定义构造函数。编译器生成的"默认值"根本不存在。
参考:CPP首选项
默认构造函数是可以在没有参数的情况下调用的构造函数(使用空参数列表定义,或使用为每个参数提供的默认参数定义(。
引用 cpp 首选项:
默认构造函数是可以在没有参数的情况下调用的构造函数(使用空参数列表定义,或使用为每个参数提供的默认参数定义(。
如果没有提供其他构造函数,编译器只会为您隐式生成默认构造函数,因此在您的示例中不会生成它。
您确实定义了一个 no-arg 构造函数,覆盖了默认构造函数。您为参数提供了默认值,因此您可以在没有参数的情况下调用它,并使用默认值。
在本例中,参数化构造函数已定义,所有参数都具有一些默认值。因此,即使您在不传递任何参数的情况下创建一个对象,它也会将参数化构造函数视为默认构造函数并被调用。例如,如果将构造函数定义为
constructor(int a, int b = 20 )
{
x = a;
y = b;
}
然后,您必须创建具有至少一个值的类的新对象,该值将被分配给参数"a"。
正如
您在前面的答案中读到的那样,由于您为参数提供了默认值,因此这是此类对象的默认构造函数。
所以就像写:
constructor()
{
x = a;
y = b;
}
这正是你所做的!
相关文章:
- 无法在构造函数中执行设置元素插入
- 运算符 new 的执行顺序和构造函数的参数
- 在构造函数中删除后继续执行
- 在执行new期间是否可以在构造函数中传递不同的参数?
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 如何执行参数化构造函数的调用?
- 显式构造函数仍在执行转换
- 遵循 C++ 中的构造函数执行顺序
- 模板化构造函数无法执行转换
- 如果默认构造函数不执行任何操作,则目的是什么
- 复制构造函数如何执行?
- 使用构造函数的可变参数中的其他模板化类执行模板化类的初始化
- 如何为基类构造函数中的每个子类执行特定任务
- Arduino 上的 Sketch 停止在对象构造函数中执行
- 具有模板参数推导的构造函数意外执行
- 将执行哪个构造函数
- 在执行不平凡的构造函数之前引用成员
- 如何对继承构造函数执行正确的SFINAE
- C++中的构造函数执行顺序
- 构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化