程序设计3

原创 2006年06月13日 10:46:00

 

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

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

}

Linux按键驱动程序设计(3)-按键操作硬件实现

1、复习裸机按键操作驱动 #define GPGCON (volatile unsigned long *)0x56000060 /* * K1,K2,K3,K4对应GPG0、GPG3、GPG...
  • u013181595
  • u013181595
  • 2017年07月01日 16:34
  • 296

类与对象编程题3(C++程序设计第3周)

问题描述下面程序的输出结果是:5,55,5请填空:#include using namespace std; class Base { public: int k; Base(int...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2015年12月12日 18:46
  • 1285

读《计算机程序设计艺术》卷1:基本算法(第3版)

共5卷,高德纳 第4卷写了三本,A,B,C 还计划写第6卷和第7卷 数学家,是什么样子的,看这本书去找答案。 习题说明 题1,M20:如果习题涉及的数学概念或者动机大大超...
  • wide288
  • wide288
  • 2017年12月18日 10:36
  • 169

类和对象-编程题#3(C++程序设计第3周)

编程题 #3 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面程...
  • abc8730866
  • abc8730866
  • 2017年02月28日 16:44
  • 386

第三章 Dom操作

浏览器中的Dom文档对象模型Dom是独立于语言的,用以操作XML和HTML文档的程序接口(API)。在浏览器中的接口通常是以javascript操作的,因此大多数的脚本都在与DOM打交道。Dom和ja...
  • yangyiboshigou
  • yangyiboshigou
  • 2017年05月18日 18:59
  • 198

C++程序设计(第三版)谭浩强 一章习题

C++程序设计(第三版)谭浩强 一章习题及其答案
  • qq_36868342
  • qq_36868342
  • 2017年05月10日 21:55
  • 3727

强烈推荐PHP与MySQL程序设计(第3版)

PHP与MySQL程序设计(第3版) 当当上购买 当当网全场免运费!! 关于PHP与MySQL程序设计(第3版) 评论读后感:这书讲得太乱了。没看到原版的。 很多地方都是错误或者遗漏的,从...
  • lang_csdn
  • lang_csdn
  • 2010年12月06日 17:32
  • 935

第三章 最简单的C程序设计——顺序程序设计

第三章 最简单的C程序设计——顺序程序设计 3.1顺序程序设计举例 摄氏华氏 计算存款利息   3.2数据的表现形式及运算 常量和变量 整型常量 实型常量 十进制小数形式,由数字和小数...
  • l358682594
  • l358682594
  • 2014年09月28日 20:23
  • 617

JavaScript+DOM编程艺术 第三章 DOM

DOM简介1.HTML DOM:网页被加载时,浏览器会创建文档对象模型 2.DOM操作HTML:改变HTML的元素、属性、CSS样式、对所有事件作出反应DOM操作HTML不要在文档加载完成后使用do...
  • qq_34664510
  • qq_34664510
  • 2017年07月10日 21:34
  • 209

Windows程序设计(第五版)源代码重写

第三章:HelloWin代码 原书中对CreateWindow函数的参数没有交待清楚,为了更便于初学者理解,我重写了该程序,并加上了注释,希望对学习win32的朋友们有所帮助。/***********...
  • villastoner
  • villastoner
  • 2003年02月07日 12:54
  • 1637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序设计3
举报原因:
原因补充:

(最多只允许输入30个字)