C++中两个类互相包含的策略

上一篇 / 下一篇  2012-09-13 09:13:08 / 个人分类:C++

51Testing软件测试网3{ {Y)Cje@9eW

  一、问题描述

A/K:eM@)f:kEM0 51Testing软件测试网@1~'|2kz A!n

  A类包含B类的实例,而B类也包含A类的实例51Testing软件测试网M l#V(@4Tm

{4z/S5y5^o!i*A0  二、求解策略

zL7vr$pd0

o3V8ZY:fd R0  1)错误的解法

U1eK@)T0 51Testing软件测试网6A9LK;S:yu

  A文件包含B,而B文件又包含A文件,这样就形成死循环

&l Hq2u m2d3f0

8T6s*\*r7x Cv0

{ j d}L0
#include "B.h"  51Testing软件测试网9W%H2aqD.V+\ G3e7wy%~
 
Na+L |_Pn0class A  51Testing软件测试网p` S+`xK X z
51Testing软件测试网4w~x(n*k?n ?)D(f
    int i; 
(k!V]&^7w"^'C0    B b; 
Z)M,yZ+nE_0}; 
:KIU-_4Pv.L*b'F0 
Q]JHG0#include "A.h" 
4D"u/v} c(dQ]0class B 
4x eO6g^0QS n P0
$ayY1j@?q&F%l#{0    int i;  51Testing软件测试网0F R$@+e:W;S M8X
    A   a; 
a8hlh~*u!\5|0};
51Testing软件测试网~4TqFX os5J5X

  2)正确的写法以及注意事项

1ye_w9yGd9s0

|_$ptRq4qF? FL0  1)主函数只需要包含b.h 就可以,因为b.h中包含了a.h

6o ZbHG@-x0 51Testing软件测试网aZ&El8Z8g"^]

  2)a.h中不需要包含b.h,但要声明class   b。在避免死循环的同时也成功引用了b

C-zwQz3ob,`hFB&b0

4WBN#pX a5C9C6^.S0  3)包含class  b 而没有包含头文件 "b.h",这样只能声明  b类型的指针!!!!而不能实例化!!!!51Testing软件测试网$j@0bK0gG5]6Cq:k

51Testing软件测试网|5Hv0ht j(C

  a.h:51Testing软件测试网 @#ed h1w'f0[,J7}

51Testing软件测试网 PY _`5Y,GXB#}^

51Testing软件测试网T3~*El*k]a

#include <iostream> 
%TgyBs0using namespace std; 
2nq?sb*is;e(]+c0  51Testing软件测试网7R]X;e9_3QRdk
class b;  51Testing软件测试网(^_mr2m}4yw
 
R Sr!l%iyo0class a 
(x)^A)NR\P"\6d7ij051Testing软件测试网9u:m_F'p k
public: 
w^6LU m`v#E0    b *ib; 
Eyw^luI0    void putA() 
%X#R/y? M0    { 
lMem`-JD0X4Yy8}0        cout<<"这是A类"<<endl;  51Testing软件测试网 C%eqh|xC'j a
    } 
vU4n'k!l-q ]5q0 
!t(ex&A{;l1e0};
51Testing软件测试网o Al'm ZF3m

  b.h:51Testing软件测试网Og,m f'?

l(K9R4gn'N[ uw&b;E9v0

7No S~v O }0
#include <iostream> 
ek#x}9Hdh7X&U,K0#include "a.h" 
m,cpUy9m"J5w0  51Testing软件测试网#?\6M9k|3{d M;Oh
using namespace std; 
4b%oN l/@k#LkXh4x0class b 
SS,ng7U!M#M2\0
1_4wK;\{kKGX0public:  51Testing软件测试网{!_(?3o:C c"z0yz
    a ia; 
gX `/a9{C0VSY p0    void putB() 
mF"J$ZpeSz0    { 
)Bj|G N%x8[&t!a-sY#p0        cout<<"这是B类"<<endl; 
*N]G:L$k0XQ0    }  51Testing软件测试网 O H*A9W q2MX
  51Testing软件测试网v2k+W Z4jls?'Z
};

5E t)Y*c:IX dV$KX0  主函数

j VLHHg;`i9LTs0 51Testing软件测试网J1h3OJ4OYv

x ]'m*Q-C!l,P5??fF0 #include <stdio.h> 
1E,t0ql*F$JH#}zp0#include <tchar.h>  51Testing软件测试网)s4_x3]`.q
#include "b.h" 
j3Rlf oM^ImL0int _tmain(int argc, _TCHAR* argv[])  51Testing软件测试网1G D Mh9M:ZQ.El

1J*pkh*Gn z2q8zf0      51Testing软件测试网9_0X p W7Xy
    b B; 
oG_^7J(g0    B.putB();  51Testing软件测试网KX O#Y3fL
 
L3wq1Q&IHop,d(i M0    B.ia.putA();  51Testing软件测试网^/@o6G/QRgI
 
-zz)Cg {I+I0      51Testing软件测试网NHb6`'IV#S
       51Testing软件测试网/lC"g{w
  51Testing软件测试网FRrL+I6j
    getchar(); 
*{#W8qHxh]*U _0    return 0;  51Testing软件测试网:wj/V&nn{,Rl
}

TAG:

 

评分:0

我来说两句

Open Toolbar