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

#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;
}
这是个定义的日期加一天能输出第二天的日子 我如果不定义空参的构造函数就会报错,或者把构造函数去了,用成员函数赋值,这是不是我问的东西呢?

是这样的。
你定义了构造函数,系统就不会用默认的构造函数了。
代码中你定义了自己的带参构造函数,所以系统的默认构造函数就在编译时,不会生成了。
这个就需要自己定义了。
否则的话,Date a;这样使用的时候就会报错。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-29
当你自己定义一个构造函数的时候,编译器就不再生成默认构造函数了,除非你自己显式的定义,所以你如果定义了有参数的构造函数,然后却想无参数初始化,编译器会报错的
简单来说,你要么不写构造函数,用成员函数赋值,要么就把有参数无参数的构造函数都显式的定义清楚,
第2个回答  2012-06-29
定义对象的时候它会调用相应的构造函数初始化自己。如果没有参数就调用不带参数的构造函数。
第3个回答  2012-06-29
如果一个类定义中没有构造函数,那么编译器会自动给这个类添加一个空参的构造函数,函数体是什么也不做。如果你给一个类实现了构造函数,它们编译器就不再会这个类自动添加空参的构造函数了。这时候,如果你没有提供空参构造,这意味着这个类将不允许空参构造。这也就是你在编译时遇到的现象。如果你希望使用空参构造和带参构造两种构造方式并存,你就需要分别实现两个构造函数,或者实现一个带默认参数的含参构造。
第4个回答  2018-05-08
这个例子中有两个构造函数,分别是含参和不含参的。那么在定义对象的时候不初始化也不会报错吧。

c++里使用动态分配内存,如何调用带参数的构造函数
你可以输入以后再拷贝到数组里去(operator=),因为定义对象数组时就必须初始化每个对象,所以 student = new Student[n];这一句实际上已经调用了每个对象的无参数构造函数,如果你没有提供一个无参数的构造函数那么这个句子会报错 另一种方法是 Student** student;student = new Student*[n];\/\/ 输入...

C++创建A a;而程序员自定义的是带参数构造函数,那么是否会调用默认构造...
当程序员自定义的构造函数是带参数构造函数,编译器不会自动生成不带参数的构造函数,即创建A的对象时,对象必须有参数;此时创建A a,编译器会报错。当程序员没有自定义构造函数时,编译器则会自动成成不带参数的构造函数,此时创建A a是合法的。定义类时,一般要写上多个构造函数。

在C++代码编写中出现的“no appropriate default constructor”是什么...
你只定义了带参数的构造函数,但是在定义该类的对象时没有给该对象传参数。例如:class A { public:A(int nAge){m_nAge = nAge;} private:int m_nAge;};此时若定义 A people;则会出现no appropriate default constructor错误提示 解决方法:1. A people(20);即定义对象时传参数 2.或给类加上...

C++构造函数和析构函数详解
CTime(){}带参数的构造函数:这样的一个构造函数提供了一个三个成员属性的初始化,声明对象的时候就可以传入参数了。CTimetime(Hour,Minute,Second);\/\/对象的定义CTime(intHour,intMinute,intSecond){m_nHour=Hour;m_nMinute=Minute;m_nSecond=Second;} 在有了构造函数之后,我们声明时...

c++中为什么基类中只有带参数的构造函数时,派生类中一定要显示定义构造...
因为创建派生类对象时要调用基类的构造函数,当基类没有定义构函数时就调用默认无参数的构造函数。当只定义了有参的构造函数时就调用有参的构造函数,所以当派生类没有给基类传递参数时就会出现错误。解决方法:可以在基类中重载一个无参构造函数,或者给有参构造函数的参数设置默认值。

C++对象生灭 问题!
构造函数如果不写的话, 编译器会帮你定义一个什么也不干的版本, 没有参数, 对所有成员默认初始化, 但是不初始化内置类型 2. 析构函数的定义、特点、使用方法 析构函数为类名前加~, 不可以有参数, 对象销毁时调用, 可以定义为虚函数 class T{ ~T(){ } \/\/ 这个析构函数什么也不做,};什么...

c++题目,这道题为什么选b?
A:一般类的默认构造函数(无参)会自动生成,但是如果你定义了有参数的构造函数,那么就不会自动生成默认构造函数,需要你自己在定义一个默认的构造函数。而A选项定义了没有参数的类对象,所以调用默认构造函数,但是类却没有定义默认构造函数,所以错误。B: 是定义对象的指针,并没有创建对象,所以没有...

C++怎么定义对象数组 但不初始化?
你这样定义自动运行类里面无参数的构造函数,成员的初始直为你自己定义的.如果没有定义无参数的构造函数,直接调用系统缺省的构造涵数,这时候对像成员的直为任意.

C++构造函数和析构函数到底有什么作用啊?。。。一菜鸟求助!!!_百度...
3.默认构造函数与缺省参数的构造函数 如果在类中没有显示定义构造函数,则编译系统会为该类提供一个默认的构造函数,该默认构造函数是一个无参函数,函数体为空,它仅仅负责创建对象,而不做任何初始化工作(即不给相应的数据成员赋初值),所以在该类的对象创建时不能保证有一个确定的初始状态。良好的...

深入理解c++特殊成员函数
构造函数用于创建对象实例并初始化数据成员。C++98要求有含参数的构造函数,以确保数据成员有明确初始值。C++11则允许数据成员默认初始化。析构函数用于销毁对象。通常,只有在类管理资源(如原始指针、线程、文件描述符等)时才需要自定义析构函数。复制构造函数用于创建对象副本,赋值运算符用于将一个对象的...

相似回答