基类指向子类对象

来源:互联网 发布:telnet带端口号 编辑:程序博客网 时间:2024/06/17 02:48

引用和多态

编辑
引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。
【例】:
class A;
class B:public A{……};
B b;
A &Ref = b; // 用派生类对象初始化基类对象的引用
Ref 只能用来访问派生类对象中从基类继承下来的成员,是基类引用指向派生类。如果A类中定义有虚函数,并且在B类中重写了这个虚函数,就可以通过Ref产生多态效果。
 

创建基类指针,指向子类,这是常见和基本的c++框架

     CascadeBase *pHdlr; //CscdResourceMgr *pHdlr;  is subclass of  class CascadeBase; CscdResourceMgr:public CascadeBase
     cascadeHdlrs[CASCADE_RESOURCE_HDLR].pHdlr = CscdResourceMgr::getInstance();
     用各个子类分别实现,如cscdfilemgr,cscdresourcemgr etc。等于各个子类重写signalHandler。signalHandler 是虚函数.
     而基类写公共的部分。然后各个子类实现自己的功能。方便协同开发。
     bool CascadeMgr::handleConnctedModeMsg(union SIGNAL* &sigP)
  {
      hdlrType = getLinkupSignalHdlr(sigP->sigNo);
     cascadeHdlrs[hdlrType].pHdlr->signalHandler(sigP);
     .......
 }
 甚至可以重写虚函数的一部分
 void CascadeBase::signalHandler(union SIGNAL* &sigP)
{
      if (CascadeMgr::getInstance()->isSigFromChild(sigP))------------------基类部分
      {
          localOrChild = CASCADE_CONNECTION_CHILD;
      }
      else
      {
          localOrChild = CASCADE_CONNECTION_LOCAL;
      }
      respHandler(sigP, localOrChild, respSig);
......
}
// filemgr没有完全重写virtual 函数signalHandler,而是部分重写了signalHandler,具体的说是respHandler函数。用基类部分,用子类的重写函数.
 void CascadeFileMgr::respHandler(union SIGNAL* &sigP, CascadeConnectionIdT localChild, union SIGNAL* &rspSig)


相关概念:
http://blog.csdn.net/fdsafwagdagadg6576/article/details/50780639
0 0
原创粉丝点击