构造函数中的this指针
2010-10-15 09:07:53 来源:Web开发网●传递 this 对象的任何一个数据成员给另一个数据成员的初始化程序
你必须确保该数据成员已经被初始化。好消息是你能使用一些不依赖于你所使用的编译器的显著的语言规则,来确定那个数据成员是否已经(或者还没有)被初始化。坏消息是你必须知道这些语言规则(例如,基类子对象首先被初始化(如果有多重和/或虚继承,则查询这个次序!),然后类中定义的数据成员根据在类中声明的次序被初始化)。如果你不知道这些规则,则不要从this对象传递任何数据成员(不论是否显式的使用了this关键字)给任何其他数据成员的初始化程序!如果你知道这些规则,则需要小心。
----------------------------用途----------------------------------
好的OO设计强调“高聚合”,这样会产生很多小的责任单一的对象(其实“单一责任原则”根本就是最基础的OO原则)。
那么,小对象之间的协作就需要配置(其实“协作可配置”本身就是我们希望的灵活性所在):
●比如Observer模式中subject和observer的协作需要调subject.RegistorObserver(observer)来配置
●再比如多媒体框架DirectShow中filterGraph和videoWindow的协作需要调filterGraph.SetVideoWindow(videoWindow)来配置
而构造函数是很典型的配置时机,举例如下:
class CMyWindow : public CWnd
{
private:
CFilterGraph filterGraph;
public
CMyWindow() { filterGraph.SetVideoWindow(this); };
};
--------------------------附录------------------------------------
顺便总结基础知识
表一 | |
who | be called |
普通函数 | class::fun() |
构造函数 | superclass::superclass() ==〉subclass::subclass() |
析构函数 | subclass::~subclass() ==〉superclass::~superclass() |
表二 | ||
who | where | be called |
非虚函数 | everywhere | class::fun() |
虚函数 | 普通函数 | obj.vfun() |
虚函数 | 构造函数 | class::vfun() |
虚函数 | 析构函数 | class::vfun() |
更多精彩
赞助商链接