C++结构体
1.C++结构体有默认的构造函数
#include<cstdio> 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<cstdio> using namespace std; struct node { int m,n; }; node a; int main() { printf("%d %d\n",a.m,a.n); return 0; }
运行结果:
2.把默认的构造函数写出来后,系统就不会再生成默认函数
#include<cstdio> 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<cstdio> 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<cstdio> 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<cstdio> 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<cstdio> 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; }
运行结果:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。