程序设计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语言程序设计——教材回顾3

早上爬起来看了阿根廷和荷兰的比赛,

C++程序设计实验报告(二十九)---第二周任务三(3-1)

第二周报告3:字符数组 实验目的:输入一行字符,统计其中有多少个单词 实验内容:输入一行字符,统计其中有多少个单词。每两个单词之间以空格(可能多个)隔 开,或者由标点符号(只考虑 , . ; ?...

使用(EA)UML进行AS3程序设计

这篇文章主要介绍了如何使用EA(Enterprise Architect)来展开基于UML的ActionScript3程序设计。比较出色的地方在于对于EA中与AS3语法不相符的地方进行了修改,使得其可...

L3-003. 社交集群-PAT团体程序设计天梯赛GPLT(并查集)

L3-003. 社交集群 在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。 输入格式: 输入...

C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

在我们熟悉的现实世界中,一切事物都是对象。对象可以是有形的,也可以是无形的。对象可以是一个个体,也可以是由诸多其他对象组成。C++支持这种抽象,将抽象后的数据和函数封装在一起,便构成C++的“类”。 ...

JAVA 程序设计 3-1 分数相加

public class TestFractory { /** * @param args */ public static void main(String[] args) ...

C++程序设计实验报告(8-3)

/* 实验内容: 实现分数类中的运算符重载 * 程序的版权和版本声明部分  * Copyright (c) 2011, 烟台大学计算机学院学生  * All rights reserve...

L3-004. 肿瘤诊断-PAT团体程序设计天梯赛GPLT(广度优先搜索)

L3-004. 肿瘤诊断   在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。 输入格式: 输入第一行给出4个正整数:M、...

PAT-团体程序设计天梯赛-练习集- L3-010 是否完全二叉搜索树【三星级】

题目链接:https://www.patest.cn/contests/gplt/L3-010 题面: L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 655...

java实验3:流处理程序设计

题目3:流处理程序设计 实验目的和要求:要求学生能在学习和理解课堂学习内容中JAVA流编程理论的基础上,学习并逐步掌握JAVA流程序的编写和调试,学习根据处理需求对不同流的正确选择使用和组合...
  • caduca
  • caduca
  • 2014-12-09 15:39
  • 2183
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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