C++程序中无参构造函数未调用的原因咨询
问题分析:无参构造函数未被调用的原因
嘿,我一眼就揪出问题所在了——你代码里的Date one();根本不是在创建对象,而是在声明一个函数!这是C++里有名的「最令人困惑的解析(Most Vexing Parse)」陷阱,很多新手都会踩这个坑。
具体原因
当你写下Date one();时,编译器会把它解析为:
声明一个名为
one的函数,该函数不接受任何参数,返回一个Date类型的对象
完全不是你预期的「调用无参构造函数创建Date对象one」,所以你的无参构造函数自然不会被执行。
修正方案
要正确调用无参构造函数创建对象,你有两种靠谱写法:
- 兼容C++98及更早版本:
Date one; - C++11及以后更推荐:
Date one{};(这种写法能彻底避免类似的解析歧义)
修正后的完整代码
#include<iostream> class Date{ int day,month,year; public: Date(); Date(int,int); Date(int); Date(int,int,int); }; Date :: Date(){ day=10; month=5; year=19; std::cout<<"********************************************"; std::cout<<day<<month<<year; } Date :: Date(int a){ day=a; std::cout<<day; } Date ::Date (int a,int b){ day=a; month=b; std::cout<<day<<month; } Date ::Date(int a,int b,int c){ day=a; month=b; year=c; std::cout<<day<<month<<year; } int main(){ Date one; // 这里是修正后的写法 Date two(6); Date three(2,3,4); Date four(2,3); return 0; }
修正后的输出
运行修正后的代码,你会看到无参构造函数的内容先输出,接着是其他构造函数的结果:
********************************************10519623423
内容的提问来源于stack exchange,提问作者gokul
相关产品推荐
相关产品推荐

