1.C++结构体有默认的构造函数
?
#include
using namespace std;
struct node
{
int m,n;
};
int main()
{
node a;
printf("%d %d\n",a.m,a.n);
return 0;
}
运行结果:
?

因为默认的构造函数没有形参且函数体里是空的,所以结构体没有被初始化,输出的值是系统给的,如果把结构体变量定义为全局变量,那么会输出0 0,这是因为全局变量和局部变量在没有初始化时,取初值方式不同,造成运行结果不同
?
#include
using namespace std;
struct node
{
int m,n;
};
node a;
int main()
{
printf("%d %d\n",a.m,a.n);
return 0;
}
?
运行结果:
2.把默认的构造函数写出来后,系统就不会再生成默认函数
?
#include
using namespace std;
struct node
{
int m,n;
node(){}//默认的构造函数
};
int main()
{
node a;
printf("%d %d\n",a.m,a.n);
return 0;
}
运行结果:
?
3.
?
#include
using namespace std;
struct node
{
int m,n;
//node(){}//默认的构造函数
node(int a,int b)
{
n=a;
m=b;
}
};
int main()
{
node a;
printf("%d %d\n",a.m,a.n);
return 0;
}
这时候程序出错,因为a找不到合适的构造函数,因为你写了构造函数后默认的构造函数系统就不生成了,这时候得重载构造函数如下:
?
?
#include
using namespace std;
struct node
{
int m,n;
node(){}//默认的构造函数
node(int a,int b)
{
n=a;
m=b;
}
};
int main()
{
node a;
printf("%d %d\n",a.m,a.n);
return 0;
}
4.
?
?
#include
using namespace std;
struct node
{
int m,n;
node(){}//默认的构造函数
node(int a,int b)
{
n=a;
m=b;
}
//使用初始化列表的构造函数
//node(int a,int b):m(a),n(b){}
};
int main()
{
node a;
node b(2,3);
printf("%d %d\n",a.m,a.n);
printf("%d %d\n",b.m,b.n);
return 0;
}
运行结果:
?
?

5.使用初始化列表的构造函数
?
#include
using namespace std;
struct node
{
int m,n;
node(){}//默认的构造函数
/*node(int a,int b)
{
n=a;
m=b;
}*/
//使用初始化列表的构造函数
node(int a,int b):m(a),n(b){}
};
int main()
{
node a;
node b(2,3);
printf("%d %d\n",a.m,a.n);
printf("%d %d\n",b.m,b.n);
return 0;
}
运行结果:
?
