C++ 結構體初始化


c++結構體

1. 構造函數和運算符

這樣沒有默認值

 

struct node{
 int id;
node*left;
 node(int a):id(a),left(nullptr){}

};

 

 這樣要注意如下的問題

node * root=new node(0);
node * y;
node* x=root,z;

//這樣會報錯 no-matching-function-for-call-to-nodenode; 原因應該是 node* x=root,z;的z被當做了構造函數參數的一部分?

改成
node * x=root;
node* z;就沒問題了

 

 

這樣有默認值(new的時候可以先不賦值)

 

struct Point{

int x,y;

Point (int x=0,int y=0):x(x),y(y){}

};

Point operator + (const Point&A,const Point&B) {   //構造函數

retuen Point(A.X+B.x,A.y+B.y);

}

ostream& operator <<(  //不搞了

 

 

Point a,b(1,2);

a.x=3;

 

 

 template的結構體

struct Point{

T x,y;

Point (T x=0,T y=0):x(x),y(y){}

};

Point<T> operator + (const Point<T>&A,const Point<T>&B) {   //構造函數

retuen Point<T>(A.X+B.x,A.y+B.y);

}

Point<int>a;

 

 

 重載運算符:

 

struct ant

{

    int id;

    int p;

    int d;

    bool operator <(const ant &a) const {return p<a.p;}

};

 

 普通的初始化

struct Person p1 = {"zhangsan",20,170};

 

 

另一種構造

 

struct Stu

 {

  int  nNum;

  bool bSex;

  char szName[20];

  char szEmail[100];

 

  //構造函數初始化

  Stu()

  {

   nNum = 0;

   bSex = false;

   memset(szName,0,sizeof(szName));

   memset(szEmail,0,sizeof(szEmail));

 

  }

 };

 

 

2.自動賦值

1.結構體指針,malloc分配空間,不會自動賦值  但是new會。  這里包括指針自動賦值NULL

 

 (測試發現如果不構造函數初始化為零,那么newmalloc都是隨機的;但是初始化后new不隨機,malloc仍隨機)//也就是上面說的有沒有默認值

所以要注意初始化

這里的初始化可以是

 

struct ss{
int
a=0; int b=1; struct ss * next,*be=NULL;
};

或者

 

ss(int a=0,struct ss * next=NULL):a(a),next(next){} 

 

 

3. 注意何時需要分配內存。

寫入數據才需要。而只是指向地址則不需要。故假設p1 寫入了數據,p1new,而p2=p1即可,無需new

 

 注意free

 

4.

 

int height(node* root)

{

    if(root==NULL)

        return 0;

    int lh=height(root->next);

    int rh=height(root->be);

    return (lh>rh)?lh+1:rh+1;

}

 

struct ListNode {

int val;

ListNode* next;

ListNode(int x) : val(x), next(NULL) {}

};

///ListNode* h = new ListNode(0);

///或 ListNode h(0);

struct node{

int a;

struct node *next,* be;

node(int a=0,struct node * next=NULL,struct node * be=NULL):a(a),next(next),be(be){}

};
Node a (
1null,null); node * root=new node; node * root1=(node*)malloc(sizeof(node)); int h=height(root); //h=1,因為是new出來的,root不認為是NULL int h2=height(root1); //出錯,因為root是隨機的 root1=NULL; int h2=height(root1); h2=0;

 

 

由上,再創立節點以及給其nextNULL,賦值時要小心注意。   

注意順序。

root new了。然后root=NULL。就不要;root->next=new了。

 

5.

還有一個錯誤。比如 node *p=root

p=NULL;這樣p就和root又無關了。不要用proot


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM