程序设计3

 

有这样一种需求,两个类:

class A

{

    B b;

    //在成员函数中使用b

};

 

class B

{

//需要调用A的成员函数(算法)

};

 

这种情况下,A类是一个全局的控制类,它有一系列的算法调用各个子模块,然而子模块在自己的任务中,有时需要回调全局控制类A的算法。设计一种什么结构可以完成这种需求?

现在的方法是,把需要回调的A的算法做成一个接口,A类从这个接口继承,B类拥有这个接口的一个指针,并提供该接口指针的初始化函数。把A类的this指针初始化给b,使得B类可以通过该接口回调A类的算法。按照这种思路,下面是一个测试例子:

//接口

#ifndef __IBS_H__

#define __IBS_H__

 

class IBS

{

public:

     IBS(void);

     ~IBS(void);

     virtual void Print(int Val) = 0;

};

 

#endif //__IBS_H__

 

     //相当于B类:拥有接口的指针及初始化方法

#ifndef __SMALL_H__

#define __SMALL_H__

#include "IBS.h"

 

class CSmall

{

public:

     CSmall(void);

     ~CSmall(void);

     void Ini(IBS* pBS);

     void SmallPrint(int Val);

private:

     IBS* m_pBS;

};

 

#endif //__SMALL_H__

 

#include "StdAfx.h"

#include "./small.h"

 

CSmall::CSmall(void)

{

     m_pBS = NULL;

}

 

CSmall::~CSmall(void)

{

}

 

void CSmall::SmallPrint(int Val)

{

     if( m_pBS )

         m_pBS->Print(Val);

}

 

void CSmall::Ini(IBS* pBS)

{

     m_pBS = pBS;

}

 

     //相当于A类:对接口继承实现

#ifndef __BIG_H__

#define __BIG_H__

 

#include "IBS.h"

#include "Small.h"

 

class CBig:

     public IBS

{

public:

     CBig(void);

     ~CBig(void);

     void Print(void);    //对外方法

    void Ini(void);

private:

     CSmall m_Small;

private:

     void Print(int Val); //实现纯虚方法

     int BigPrint(int Val);

};

 

#endif //__BIG_H__

 

#include "StdAfx.h"

#include "./big.h"

 

CBig::CBig(void)

{

}

 

CBig::~CBig(void)

{

}

 

int CBig::BigPrint(int Val)

{

     std::cout<<"/nin BigPrint:/t"<<Val<<"/n";

     return 0;

}

 

void CBig::Print(int Val) //纯虚方法实现

{

     BigPrint(Val);

}

 

void CBig::Print(void)

{

     m_Small.SmallPrint(0); //small print

}

 

void CBig::Ini(void)

{

     m_Small.Ini(this); //指向this

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值