体验C++中接口与实现分离的技术 (3)

上一篇 / 下一篇  2008-05-04 13:54:58

lxImplement.cpp文件内容:ITPUB个人空间|*VvsN e6F&bm

7d7S0u.hSd7mI0

#include "lxImplement.h"ITPUB个人空间 Q+t&H,p2U b-bO3t

,I#Yy.?W2l0r z0ClxImplement::ClxImplement()ITPUB个人空间k0JX:D.g G
{}
Hyw0Z8OA)T$@~0ITPUB个人空间&y9d2g;[!^(Sc/K
ClxImplement::~ClxImplement()ITPUB个人空间Q1ecao A c
{}
_rZ&?|D&{0
?&wz'`6u n'D0void ClxImplement::lxTest()
i(m#a$U-_N P3q n5k0{ITPUB个人空间1d nUuy o`!_$_c*d]
 m_lxTest.DoSomething();
#qdB X~I }0}
7Q7y Z/b7RJ3b0
]3D~Bd/FhmA+c0void ClxImplement::DoSomething()
o&G.X b1z;?c0A S0{ITPUB个人空间!K:i4kno3|9u8N `O)G
 lxTest();
)I'v j KHq D0}

8al8_i ce`/_0  然后,修改类ClxExp。
Daw}U5sud+z0ITPUB个人空间tRG,V-o e0d#XrJ
  修改后的lxExp.h文件内容:
6e ])hFTHn0
M D`\zr(q N0
// 前置声明
Olo/hQKb\N${0class ClxImplement;ITPUB个人空间K%n)dU%ay t
ITPUB个人空间A3s}#NV
class ClxExp
L$Vmw]pa0{
H"V&s MCi0 public:
0xx4Hgi ae'P8O,C3k0  ClxExp();
7Dnm:s8v;Y0  virtual ~ClxExp();
*q _Nr2}9eN3l3k0  void DoSomething();ITPUB个人空间+TMF3DR
 private:
,d0^kJN6oaX0  // 声明一个类ClxImplement的指针,不需要知道类ClxImplement的定义
4P;G\ B.KUM\g9T#d(M0  ClxImplement *m_pImpl;ITPUB个人空间J T5RS.m
};

9g&{.S sJ PP0  修改后的lxExp.cpp文件内容:
"jr.]%ma'u6@0a0ITPUB个人空间.f6s W!yDO
// 在这里包含类ClxImplement的定义头文件ITPUB个人空间 u3p9x&c(TS:n
#include "lxImplement.h"
&t%c%W |c`&N U0ITPUB个人空间:F p3t*Mgu
ClxExp::ClxExp()ITPUB个人空间.q^B_9m*}7i'?,oa
{ITPUB个人空间]z;B9R J8k
 m_pImpl = new ClxImplement;
A^l"{@0}
J6b8i9s2CI Rhm-R0ITPUB个人空间-Y3MAZ#B_
ClxExp::~ClxExp()ITPUB个人空间1y\i5M8E'I yO?
{ITPUB个人空间'}4D4u8s.Q
 delete m_pImpl;
K.n'on7or0}ITPUB个人空间,Uf)B wu`0H1Hb

K|8g"G5X lz_b0void ClxExp::DoSomething()ITPUB个人空间I(d)Or0~
{ITPUB个人空间&g{$MVbFa9]
 m_pImpl->DoSomething();ITPUB个人空间w6K4?)S1M*Jd
}
ITPUB个人空间)N-HF+J8\*~
  通过上面的方法就实现了类ClxExp的接口与实现的分离。请注意两个文件中的注释。类ClxExp里面声明的只是接口而已,而真正的实现细节被隐藏到了类ClxImplement里面。为了能在类ClxExp中使用类ClxImplement而不include头文件lxImplement.h,就必须有前置声明class ClxImplement,而且只能使用指向类ClxImplement对象的指针,否则就不能通过编译。
|)V)H6Z L;{l*kA!N|0ITPUB个人空间9Bb@I){_S6j
  在发布库文件的时候,我们只需给用户提供一个头文件lxExp.h就行了,不会暴露类ClxExp的任何实现细节。而且我们对类ClxTest的任何改动,都不需要再给用户更新头文件(当然,库文件是要更新的,但是这种情况下用户也不用重新编译!)。这样做还有一个好处就是,可以在分析阶段由系统分析员或者高级程序员来先把类的接口定义好,甚至可以把接口代码写好(例如上面修改后的lxExp.h文件和lxExp.cpp文件),而把类的具体实现交给其他程序员开发。 ITPUB个人空间&h]? C9S(k m


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 54873
  • 日志数: 3708
  • 建立时间: 2008-04-12
  • 更新时间: 2008-08-15

RSS订阅

Open Toolbar