C++类的默认构造函数
C++问题:定义一个类的对象数组,例如Circle类的cArray数组:CirclecArray[10];为什么此时Circle类必须有默认的构造函数,不写编译器不是自动...
C++问题:定义一个类的对象数组,例如Circle类的cArray数组:Circle cArray[10];为什么此时Circle类必须有默认的构造函数,不写编译器不是自动生成什么都不做的默认构造函数吗?
问题的重点是为什么对象数组需要默认构造函数?这个默认构造函数对于对象数组来说,初始化的结果是怎么样的? 展开
问题的重点是为什么对象数组需要默认构造函数?这个默认构造函数对于对象数组来说,初始化的结果是怎么样的? 展开
4个回答
展开全部
如果你不写构造函数,编译器自动生成一个函数体为空的默认构造函数。但如果你写了一个有参数的构造函数,就不会自动生成了,就需要自己写一个无参构造函数。
建立数组需要无参构造函数是因为:你在写数组的时候写法只能是Circle cArray[10],没法传参数进行初始化。而建一个变量时,可以Circle c(<参数表>),可以传参数初始化。默认构造函数初始化的结果是:如果数据成员是对象,那么就调用它的无参构造函数;否则(比如是int, float之类的)则是一个不可预知的值,也就是“乱码”。
建立数组需要无参构造函数是因为:你在写数组的时候写法只能是Circle cArray[10],没法传参数进行初始化。而建一个变量时,可以Circle c(<参数表>),可以传参数初始化。默认构造函数初始化的结果是:如果数据成员是对象,那么就调用它的无参构造函数;否则(比如是int, float之类的)则是一个不可预知的值,也就是“乱码”。
展开全部
想先问一下,你的Circle类中是不是写有带有参数的构造参数?
在类中没有构造函数的前提下,会自动生成默认的无参构造函数。但是在有构造函数的情况下,会认为你需要的构造函数就是这些,认为你不需要无参构造函数
构造函数一般都会对对象做一些初始化之类的事情。
为什么对象数组需要默认构造函数?你应该这样想,对象数组怎么实现对数组中的成员初始化。假如类A有构造函数A(int,char,double),那么我们在定义一个对象的时候可以A a(i,c,d);这样来对对象a进行初始化,可是,对象数组没办法实现,所以需要一个默认的构造函数,不带参数的构造函数与定义。
自己没写构造函数的话,初始化一般是乱码
在类中没有构造函数的前提下,会自动生成默认的无参构造函数。但是在有构造函数的情况下,会认为你需要的构造函数就是这些,认为你不需要无参构造函数
构造函数一般都会对对象做一些初始化之类的事情。
为什么对象数组需要默认构造函数?你应该这样想,对象数组怎么实现对数组中的成员初始化。假如类A有构造函数A(int,char,double),那么我们在定义一个对象的时候可以A a(i,c,d);这样来对对象a进行初始化,可是,对象数组没办法实现,所以需要一个默认的构造函数,不带参数的构造函数与定义。
自己没写构造函数的话,初始化一般是乱码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实上面说的都不错啊,你建立的对象数组,表示的意思是什么?是不是一组对象的数组,实质上是一个数组,数组元素是类的对象,例如Circle类的cArray数组:Circle cArray[10];表示的是建立了一个数组,数组元素的每个对象都是Circle类的对象啊,既然是构建了Circle类的对象,那必须要用到类的构造函数的啊,默认的构造函数,和你构建的类有关系,不是什么都不做啊,是完成某些初始化变量的。比如说
class Circle
{
private: int i ,j;
public:
Circle(){i=0;j=0;}
};
假如我构造的上面说的Circle cArray[10];表示的就是数组中每个对象都使用Circle(){i=0;j=0;}来初始化变量。
class Circle
{
private: int i ,j;
public:
Circle(){i=0;j=0;}
};
假如我构造的上面说的Circle cArray[10];表示的就是数组中每个对象都使用Circle(){i=0;j=0;}来初始化变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询