http://www.cppblog.com/tiandejian/archive/2008/01/02/40082.html
http://publish.itpub.net/msoft/2008-01-07/200801071126077_5.shtml
第一篇文章让我获益匪浅,但Effective C++的书看了, 但没有看到,难道是版本不对:)
头文件依赖,是我当前所做项目中一个很头痛的问题,从这两篇文章,我得到了很好的启示。
1〉依赖声明,不依赖定义,作为C++设计的各位可以深深体会一下,特别项目大了以后,每次添加或修改一部份功能,都回造成好多的代码重新编译,等待时间如此之长,可叹!
2〉依赖一个最顶级类,如接口,函数定义,纯虚类(或一般不怎么修改的类,如标准类),经典实例:
//ClickReceiver.h
class ClickReceiver
{
public:
virtual void OnClick() = 0;
};
//MyDialog.h
#include "ClickReceiver.h"
Class CMyCtrl;
class CMyDlg : public MyCtrlBase,
public Clickreceiver
{
public:
virtual void OnClick();
void SetCtrlReveiverObject(MyCtrl* pMyCtrl,);
private:
MyCtrl * m_myCtrl;
}
void CMyDlg ::SetCtrlReveiverObject(MyCtrl* pMyCtrl,)
{
pMyCtrl->SetReceiver(this);
}
//MyCtrl.h
//Class ClickReceiver;
class MyCtrl : public MyCtrlBase
{
public:
virtual void OnClick();
void SetReceiver(ClickReceiver * pReciever){m_receiver = pReciever};
private:
ClickReceiver *m_receiver;
};
void MyCtrl::OnClick()
{
m_receiver -> OnClick();
}
以上看来,各控件基本上不依赖父类了,仅仅依赖这个纯虚类接口。从某种程度上来看,一个比较复杂的对象,就可以通过提前各个不同功能集合,作为一个接口来继承,可以给改对象中包含的其他对象一个窄接口,可以做得责任单一,减少依赖,真得很好。