程序设计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

}

读《C程序设计语言》2E-3 [4~6]章

2016.02.22 - 04.05读《C程序设计语言》2E-3 [1~3]章1 练习02.22函数与程序结构练习4-1编写函数strrindex(s, t),它返回字符串t在s中最右边出现的位置、如...

《Windows环境下32位汇编语言程序设计(第2版)》-chapter1&2&3

本来今天计划学习《PE》的第二章,可是却发现戚利老师写了3个PE程序自己看不懂,查了些资料才知道是Win32汇编编程,于是又找来《Windows环境下32位汇编语言程序设计(第2版)》(罗云彬)学习,...

团体程序设计天梯赛 L3-007. 天梯地图 Dijkstra

L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本...

《JAVA语言程序设计》期末考试试题及答案3(应考必备题库)

《JAVA语言程序设计》期末考试试题及答案3(应考必备题库) 一、单项选择题 1、如下哪个是Java中的标识符()  A、public    B、super C、3number   D、wid...

js中的面向对象程序设计(3)-继承

继承: 1.接口继承 只继承方法的签名。js中函数没有签名,所以只支持实现继承。 2.实现继承 继承实际的方法,主要依靠原型链来实现。简单回顾下构造函数、原型和实例的关系:每个...

【CUDA并行程序设计系列(3)】CUDA线程模型

CUDA并行程序设计系列是本人在学习CUDA时整理的资料,内容大都来源于对《CUDA并行程序设计:GPU编程指南》、《GPU高性能编程CUDA实战》和CUDA Toolkit Documentatio...
  • taonull
  • taonull
  • 2015年11月03日 21:55
  • 556

windows程序设计 例题解析 CHECKER3.C

/*-------------------------------------------------    CHECKER3.C -- Mouse Hit-Test Demo Program No...

《Windows环境下32位汇编语言程序设计(第2版)》-chapter3补

3.3.5变量和使用,3.4使用子程序,3.5高级语法,3.6代码风格

C语言程序设计课后作业3

作业题1提示: printf()函数是格式化输出函数,一般用于向标准输出设备(如显示器)按规定格式输出信息,可以在"%"和字母之间插进数字表示最大场宽。 例如:对于整形类型数据而言,输出函数pri...
  • h031522
  • h031522
  • 2013年03月24日 13:07
  • 472

基于DM6467的OV5642视频采集编码程序设计(3)——PAL格式输入及其他调试

1        OV5642各种输出格式调试记录 OV5642支持许多种格式输出,几乎能输出不大于2592 x 1944的任意分辨率和不大于30fps的任意帧率视频,但是要让OV5642输出想要的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序设计3
举报原因:
原因补充:

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