关于缺省构造函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:49:15
#include<stdio.h>
static int cx=1; const int constn=0;
class CA
{
public: CA(int m=1){x=constn+m+cx++} long x;
};
void main()
{
CA a[2],b(10);printf("%d,%d,%d",a[0].x,(a+1)->x,b.x);
}
能不能给我解释一下为什么a[2],b(10)都调用缺省构造函数,在缺省构造函数中m不是已经赋值了1吗,缺省构造函数的调用如何实现的?
结果是2,3,13

#include<stdio.h>
static int cx=1; const int constn=0;
class CA
{
public: CA(int m=1){x=constn+m+cx++;} long x;
};
void main()
{
CA c,a[2],b(10);printf("%d,%d,%d,%d",c.x,a[0].x,(a+1)->x,b.x);
}
我另外加一个定义CA c 这里的结果为什么是 2,3,4,14了啊,请高手指教如何产生的这两个结果

int m=1不是对m赋值为1,而是m的默认值是1,如果你写CA a[2],那么两个CA对象都调用默认的构造函数,这时你没有传参数,那么默认的参数m就是1,所以第一次x=0+1+1=2,第二次cx加过了1,所以是x=0+1+2=3,后来你写CA b(10)就是调用构造函数,并且指明参数m为10,所以x=0+10+3=13

上面的理解了,下面的其实是一样的。