C++多重继承 实现解耦,mvc分离
来源:互联网 发布:加入中国籍难吗 知乎 编辑:程序博客网 时间:2024/06/11 16:22
以前刚开始学习C++时候,觉得多重继承完全没有必要。伤脑筋,处理不好。最后1个类会继承N多父亲类处理。
晚上看django资料时候。发现django的cbv(class base view)是使用多重集成的。
分为mixin与view部分。
子类化view时候,通过继承自定义的mixin来处理参数过滤。瞬间想到这其实是一种插件机制。也可以说实现了mvc的部分分离。
网上找了一下C++的多重继承资料,基本都在讲多重继承的语法。
用C++来实现下。
逻辑处理部分logic.h中
//// Logic.h// MultipleInheritance//// Created by 王 岩 on 13-8-23.// Copyright (c) 2013年 王 岩. All rights reserved.//#ifndef MultipleInheritance_Logic_h#define MultipleInheritance_Logic_hclass Mixin {protected: int m_data; public: virtual void setParam() { m_data = 10; } virtual int getParam() { return m_data; }};#endif
//// Render.h// MultipleInheritance//// Created by 王 岩 on 13-8-23.// Copyright (c) 2013年 王 岩. All rights reserved.//#ifndef MultipleInheritance_Render_h#define MultipleInheritance_Render_h#include "views.h"#include <string>class Render { public: static void RenderView( std::string templateName, int data ) { std::cout << "i come from view: " << templateName << "\ni come from data: "<< data << std::endl; }};#endif
视图部分在view.h中,代码
//// views.h// MultipleInheritance//// Created by 王 岩 on 13-8-23.// Copyright (c) 2013年 王 岩. All rights reserved.//#ifndef MultipleInheritance_views_h#define MultipleInheritance_views_h#include "Logic.h"#include "Render.h"#include <iostream>#include <string>class View {protected: std::string m_template; public: virtual void Render() = 0; virtual std::string getTemplateName() { return this->m_template; } virtual void setTemplateName(std::string sName) { this->m_template = sName; } void as_View() { this->Render(); }};class getView : virtual public Mixin , virtual public View { void Render() { this->setParam(); //这里修改为多各种参数 //参数1,html模版 //后续参数为字典 Render::RenderView( this->getTemplateName() , this->m_data); }};#endif
子类化实现在 main.cpp中代码
//// main.cpp// MultipleInheritance//// Created by 王 岩 on 13-8-23.// Copyright (c) 2013年 王 岩. All rights reserved.//#include <iostream>#include "views.h"class subMixin : virtual public Mixin{public: void setParam() { m_data = 100; }};class subGetView : virtual public subMixin , virtual public getView{ public: subGetView() { this->setTemplateName( "hello.world" ); }};int main(int argc, const char * argv[]){ // insert code here... subGetView *sView = new subGetView(); sView->as_View(); return 0;}
运行结果:
i come from view: hello.worldi come from data: 100
- C++多重继承 实现解耦,mvc分离
- (C++)多重继承
- C++--多重继承
- java实现多重继承
- 实现多重继承
- java 实现多重继承
- java实现多重继承
- 实现多重继承
- java实现多重继承
- JAVA实现多重继承
- Objective-C学习笔记---类别(实现多重继承的方法)
- Objective-C学习笔记---类别(实现多重继承的方法)
- Objective-C 类别Categroy (实现多重继承的方法)
- C++-继承:多重继承 && 虚拟继承
- C++【多重继承和虚继承】
- 内部类实现多重继承
- [Java] java实现多重继承
- Java中实现多重继承
- Spring初体验
- union关键字使用
- TCMalloc 学习总结
- ROC Curve, PR Curve and AUC
- 《算法导论》读书笔记之第9章 中位数和顺序统计学
- C++多重继承 实现解耦,mvc分离
- C++11 理解 (十四) 之 显式类型转换子
- ORACLE相关语法--子程序和程序包(package,function,procedure)
- 测试管理及测试工具盒集
- JAVA第十四弹(异常处理二)
- H264 帧边界识别简介
- android adb启动失败问题 adb server is out of date. killing... ADB server didn't ACK * failed to start daem
- 8种排序算法--冒泡排序
- 转载_Linux 内核驱动--阻塞与非阻塞机制及Poll/Select分