You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将执行哪个构造函数?带默认参数的参数化构造函数执行原因问询

问题拆解:哪个构造函数被执行?为什么会输出10 20?

嘿,咱们一步一步来搞懂这个问题~

首先直接给结论:代码里执行的就是你定义的那个带默认参数的参数化构造函数:constructor(int a = 10, int b = 20 )。

为什么没传参却调用了它?

这是C++里默认参数特性在构造函数上的典型体现:

  • 当你声明了带默认参数的构造函数,而且没有显式定义无参构造函数时,这个带默认参数的构造函数会被编译器当作无参构造函数的“替代品”。
  • 你创建对象constructor objBix;时,本质是尝试调用无参构造函数,但因为你没写无参构造,而带默认参数的构造函数支持不传参调用(所有参数自动用默认值填充),所以编译器会自动调用这个带默认参数的构造函数。
  • 换句话说,constructor objBix;完全等价于constructor objBix(10, 20);,所以x被赋值为10,y被赋值为20,调用Display()自然就输出10 20啦。

额外补充:如果同时定义无参构造函数会怎样?

要是你在代码里再加一个无参构造函数:

constructor() {
    x = 0;
    y = 0;
}

那编译时会直接报错——因为编译器不知道创建objBix时该调用无参构造,还是调用带默认参数的构造(毕竟带默认参数的也能无参调用),这就产生了调用二义性,编译器会提示你解决这个冲突。

对照代码

#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;
}

内容的提问来源于stack exchange,提问作者Nitesh Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:30:59