1.C++結構體有默認的構造函數
#includeusing namespace std; struct node { int m,n; }; int main() { node a; printf("%d %d\n",a.m,a.n); return 0; }
因為默認的構造函數沒有形參且函數體裡是空的,所以結構體沒有被初始化,輸出的值是系統給的,如果把結構體變量定義為全局變量,那麼會輸出0 0,這是因為全局變量和局部變量在沒有初始化時,取初值方式不同,造成運行結果不同
#includeusing 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.
#includeusing 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; }
#includeusing 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; }
#includeusing 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.使用初始化列表的構造函數
#includeusing 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; }