C++類的前向聲明的學習

 

    假設聲明兩個類A和B,若是須要在A.h中定義B類對象,B b_; 勢必要包含# include "B.h",而B類中須要定義A類對象A a_; 也要包含B.h,可是相互包含是不容許的,稱爲環形引用,這時候就用到了前向聲明。ide

    在B類中進行前向聲明:spa

  
  
  
  
  1. class A; 

    B.h中就不用包含A.h,可是前提是,不能定義對象,只能定義指針或引用。指針

 

A類對象

 

  
  
  
  
  1. //A.h 
  2.  
  3. # ifndef _A_H_ 
  4. # define _A_H_ 
  5.  
  6. # include "B.h" 
  7.  
  8. class A 
  9.     A(void); 
  10.     ~A(void); 
  11.      
  12.     B b_;  //要包含B.h 
  13. }; 
  14.  
  15. # endif //_A_H 

B.h內存

 

  
  
  
  
  1. //B.h 
  2. # ifndef _B_H_ 
  3. # define _B_H_ 
  4. //前向聲明,不能實例化對象 
  5. class A;  // 就不須要包含A.h,要求不能定義對象,只能給定義指針和引用 
  6. //由於咱們不知道類長聲明樣子,就沒法爲其分配內存 
  7.  
  8. class B 
  9.     B(void); 
  10.     ~B(void); 
  11.  
  12.     void fun(A& a)//只能是指針或引用 
  13.     { 
  14.         ; 
  15.     } 
  16.     //前向聲明的類不能實例化對象 
  17.     A* a_;  // 
  18. }; 
  19.  
  20. # endif //_B_H_ 

B.cppit

 

  
  
  
  
  1. B.cpp 
  2.  
  3. # include "B.h" 
  4. # include "A.h" 
  5.  
  6. B::B(void
  7.  
  8. B::~B() 
  9.  

 總結:class

     前向聲明的類不能實例化對象。sso

相關文章
相關標籤/搜索