c++中如果定义了带参数的构造函数,那么在定义对象时,必须初始化吗?

#include<iostream>usingnamespacestd;classDate{private:intyear,month,day;public:Date(i... #include<iostream>
using namespace std;
class Date
{
private:
int year,month,day;
public:
Date(int a,int b,int c)
{
year=a;
month=b;
day=c;
}
Date(){}
void Set(int a,int b,int c)
{
year=a;
month=b;
day=c;
}
void Getdate()
{
cout<<year<<"年"<<month<<"月"<<day<<"日";
}
void Function();
};
void Date::Function(){
int a=1;
if((year%400==0)||((year%100!=0)&&(year%4==0)))
{a=0;}
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
if(day!=31)
day=day+1;
else
{day=1;
month=month+1;
if(month>12)
{month=1;
year=year+1;}
}
}
else
if((month==4)||(month==6)||(month==9)||(month==11))
{if(day!=30)
day=day+1;
else
{day=1;
month=month+1;}
}
else
if(month==2)
{
if(a=1)
{
day=day+1;
if(day>28)
{
day=1;
month++;
}
}
}
if(a==0)
{
day=day+1;
if(day>29)
{
day=1;
month++;
}
}
}
int main()
{
Date a;
int YEAR,MONTH,DAY;
cout<<"输入年月日"<<endl;
cin>>YEAR>>MONTH>>DAY;
cout<<endl;
a.Set(YEAR,MONTH,DAY);
a.Function();
a.Getdate();
return 0;
}
这是个定义的日期加一天能输出第二天的日子 我如果不定义空参的构造函数就会报错,或者把构造函数去了,用成员函数赋值,这是不是我问的东西呢?
展开
 我来答
kingfeng588
推荐于2017-11-25 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1787万
展开全部
是这样的。
你定义了构造函数,系统就不会用默认的构造函数了。
代码中你定义了自己的带参构造函数,所以系统的默认构造函数就在编译时,不会生成了。
这个就需要自己定义了。
否则的话,Date a;这样使用的时候就会报错。
开心果boy16
2012-06-29 · TA获得超过205个赞
知道小有建树答主
回答量:276
采纳率:100%
帮助的人:120万
展开全部
当你自己定义一个构造函数的时候,编译器就不再生成默认构造函数了,除非你自己显式的定义,所以你如果定义了有参数的构造函数,然后却想无参数初始化,编译器会报错的
简单来说,你要么不写构造函数,用成员函数赋值,要么就把有参数无参数的构造函数都显式的定义清楚,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兔子和小强
2012-06-29 · TA获得超过6945个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1371万
展开全部
定义对象的时候它会调用相应的构造函数初始化自己。如果没有参数就调用不带参数的构造函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寻森良Z
2012-06-29 · TA获得超过368个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:129万
展开全部
如果一个类定义中没有构造函数,那么编译器会自动给这个类添加一个空参的构造函数,函数体是什么也不做。如果你给一个类实现了构造函数,它们编译器就不再会这个类自动添加空参的构造函数了。这时候,如果你没有提供空参构造,这意味着这个类将不允许空参构造。这也就是你在编译时遇到的现象。如果你希望使用空参构造和带参构造两种构造方式并存,你就需要分别实现两个构造函数,或者实现一个带默认参数的含参构造。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友54ddb31
2018-05-08
知道答主
回答量:1
采纳率:0%
帮助的人:854
展开全部
这个例子中有两个构造函数,分别是含参和不含参的。那么在定义对象的时候不初始化也不会报错吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式