学习笔记:动态分派和静态分派
来源:互联网 发布:快速排序算法 php 编辑:程序博客网 时间:2024/05/23 17:56
#include "stdafx.h"#include <iostream>struct CEmployee;struct CProgrammer;struct CJuniorProgrammer;struct CVeteranProgrammer;struct CManager;struct CCEO;class IVisitor{public: virtual void Visit(CEmployee* p) = 0; virtual void Visit(CProgrammer* p) = 0; virtual void Visit(CJuniorProgrammer* p) = 0; virtual void Visit(CVeteranProgrammer* p) = 0; virtual void Visit(CManager* p) = 0; virtual void Visit(CCEO* p) = 0;};#define FIRST_DISPATCH \virtual void Accept(IVisitor *v){ v->Visit(this);}#define SECOND_DISPATCH \ virtual void Visit(CEmployee* p ) {visit_helper(p);} \ virtual void Visit(CProgrammer* p ) {visit_helper(p);} \ virtual void Visit(CJuniorProgrammer* p ) {visit_helper(p);} \ virtual void Visit(CVeteranProgrammer* p) {visit_helper(p);} \ virtual void Visit(CManager* p ) {visit_helper(p);} \ virtual void Visit(CCEO* p ) {visit_helper(p);} \struct CEmployee{ FIRST_DISPATCH};struct CProgrammer : public CEmployee{ FIRST_DISPATCH};struct CJuniorProgrammer : public CProgrammer{ FIRST_DISPATCH};struct CVeteranProgrammer : public CProgrammer{ FIRST_DISPATCH};struct CManager : public CEmployee{ FIRST_DISPATCH};struct CCEO : public CEmployee{ FIRST_DISPATCH};class SalaryVisitor:public IVisitor{public: //通过宏定义,帮助实现更便利的书写 SECOND_DISPATCH //help函数的作用是:避免对每个子类都写代码 void visit_helper(CEmployee* p){ std::cout << "默认的算法,相当于default或者else" << std::endl; } void visit_helper(CProgrammer* p){ std::cout << "程序员基类。对一小类做“特殊处理”)" << std::endl; } void visit_helper(CCEO* p){ std::cout << "对具体的某个类做“特殊处理”)" << std::endl; }};int main() { IVisitor* pv = new SalaryVisitor(); CEmployee* pe = new CVeteranProgrammer(); pe->Accept(pv); return 0;}
0 0
- 学习笔记:动态分派和静态分派
- 静态分派和动态分派
- 静态分派和动态分派
- 静态分派和动态分派
- java静态分派和动态分派
- 【JVM】静态分派和动态分派
- Java的静态分派和动态分派
- JAVA的静态分派和动态分派
- 静态分派与动态分派
- 静态分派与动态分派
- 静态分派与动态分派
- 静态分派与动态分派
- 多态实现机制:静态分派和动态分派
- 怎样理解Java静态分派和动态分派
- Java中的静态多分派和动态多分派
- Java中的静态分派与动态分派
- java中的静态分派与动态分派
- Java静态分派与动态分派
- B-tree 算法详解
- linux系统调用
- xml解析器比较
- 23种设计模式-5-原型模式
- CSS LESS 多参数混入
- 学习笔记:动态分派和静态分派
- 代理模式
- 数组的排序(指针版)
- nyoj664整除数字(大数)
- JSP中request.setAttribute()和session.setAttribute()两个方法的区别
- HDU 1171 Number Sequence(KMP)
- objective-c NSNotificationCenter,addObserver
- 桌面雪花
- OC学习篇之---总结和学习目录