C++多重继承 实现解耦,mvc分离

C++实现一个简单的双线程MVC框架 MVC框架实现,原理如下: 两个线程一个控制线程,一个视图使用线程(tyg) 阅读详情

以前刚开始学习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_h

class Mixin {
protected:
    int     m_data;
    
public:
    virtual void setParam()
    {
        m_data = 10;
    }
    
    virtual int getParam()
    {
        return m_data;
    }
};

#endif


controler部分在 render.h中。代码
//
//  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.world
i come from data: 100



VC++用MFC编写MVC模式的球体程序源代码 内容索引:VC/C++源码,图形处理,画图,MVC  VC++为个体MFC编写MVC模式的球体演示程序,在以往的模式中,大家一般都采用 Input-Processing-Output 的单任务模式,但是现在在Windows的编程中,MVC模型更适合图形界面的设计,它将数据处理和数据显示分离开,使维护,扩展系统更加灵活。 立即下载

相关推荐

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 319

MVC框架介绍

MVC框架 MVC(model,view,controller),一种将业务逻辑、数据、界面分离的方法组织代码的框架。在改进界面及用户交互的同时,不需要重写业务逻辑。MVC将传统的输入、处理和输出分离。 Model:模型,逻辑部分,也是表示应用程序的核心,比如说数据库的表和记录 View:视图,数据显示,也是表示界面,是用于显示的,比如说...

林莫扬 330

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 725

一个很小的C++写的MVC的例子

#include<iostream> #include<vector> //get namespace related stuff using std::cin; using std::cout; using std::endl; using std::flush; using std::string; using std::...

weixin_30832143的博客 330

飞牛Docker部署Zerotier后无法访问?三步搞定SSH权限配置!

本文详细解析了在飞牛NAS上通过Docker部署Zerotier后无法访问的常见问题及解决方案。重点介绍了SSH权限配置、tun模块加载和Docker容器权限设置等关键步骤,帮助用户快速解决虚拟网络接口的权限问题,确保Zerotier节点间的正常通信。

qq_27496129的博客 788

用友T3提示,年度[UFDATA_002_2017]并不存在,导致无法备份迁移。

用友T3提示,年度[UFDATA_002_2017]并不存在,导致无法备份迁移。现在都win11了某个年度账套不存在怎么办?

雨季余静的博客 3561

MVC 模式浅析(C++版demo)

网上很少关于C++有关的MVC模式解析,所以最近闲来无事,写了个简单的demo:// mvc_test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "mvc_model.h" #include &lt;string&gt; #include &lt;iostream&gt; class MVC_View : public MVC_C...

HelloKandy's Blog 4395

代谢组学数据分析实战:用R语言从PCA、PLS-DA到OPLS-DA一步步搞定(附代码)

本文详细介绍了使用R语言进行代谢组学数据分析的全流程,从数据预处理到PCA、PLS-DA和OPLS-DA模型构建与验证。通过实际案例和代码示例,帮助研究者掌握关键分析技术,提升数据解读能力,特别适合生命科学领域的研究人员。

weixin_28689507的博客 132

C++ 23种设计模式

c++23种设计模式

c++、UE 734

Cesium体渲染实战:从医学CT到气象数据的3D可视化全攻略

本文详细介绍了如何利用Cesium体渲染技术实现医学CT和气象数据的3D可视化。从数据预处理到交互式渲染,涵盖了DICOM和NetCDF格式的处理技巧,以及性能优化的实战策略,帮助开发者高效处理复杂的三维数据集。

weixin_28717431的博客 420

YOLOv8改进策略【独家融合改进】| StarNet + 小目标检测头,加强跨尺度的上下文特征融合,提高小目标检测能力

P3/8 - small检测头原始模型中的P3/8特征层对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。适合检测尺寸大概在8x8到32x32像素左右的目标。P4/16 - medium检测头这个检测头对应的P4/16特征层经过了更多的下采样操作,相比P3/8特征图空间分辨率降低,但通道数增加,特征更抽象且有语义信息。它主要用于检测中等大小的目标,尺寸范围大概在32x32到64x64像素左右。P5/32 - large检测头P5/32。

Limiiiing的博客 634

C++多态核心原理深度解析:从虚函数表到设计模式实战

面向对象编程(OOP)是软件设计的核心范式,其核心思想在于通过封装、继承和多态来构建灵活、可复用的代码结构。多态作为OOP的关键特性,其原理在于允许程序在运行时根据对象的实际类型来调用相应的方法,这主要通过虚函数和动态绑定机制实现。这项技术的核心价值在于极大地提升了代码的扩展性和可维护性,使得程序能够在不修改现有代码的基础上,通过增加新的派生类来引入新的行为。在工程实践中,多态是构建插件系统、框架以及实现多种设计模式(如工厂模式、策略模式)的基石。理解其底层机制,特别是虚函数表(vtable)的工作原理,对

weixin_33863087的博客 319

【反卷积算法】Richardson-Lucy (RL) :通过不断迭代更新图像估计值

Richardson-Lucy(RL)反卷积算法:是一种基于最大似然估计(Maximum Likelihood Estimation, MLE)的图像去卷积方法,常用于去模糊和图像增强。通过不断地更新图像估计值,来最小化模糊图像和恢复图像之间的误差,逐步消除模糊,最终接近真实的原始图像,每次迭代都会根据当前估计的图像来修正下次迭代的结果。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 3036

DOING:设计模式及其 C++ 实现

文章目录总体介绍设计模式之单例模式(Singleton)设计模式之观察者模式 总体介绍 我们知道了很多,语法上,算法上,数据结构上的知识,但是这些只是零散的。 当我们要开发一个项目的时候,上面的东西都要用到,类似于士兵,那么我们需要统领他们,就需要有一个 将军。那么设计模式其实就是这个将军的作用。 一个模式描述了一个不断发生的问题以及这个问题的解决方案;(是一个总结成 类似 兵法的东西)。 设计模式是前人的设计经验上总结出来的,对于一些普遍存在的问题提供的通用解决方案;比如说,单例模式,观察者模式等等 常用

Mikchy的博客 427

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++23种设计模式&软件设计模型

3.适配器模式就是将原来开发的接口对于用户不符 然后转换成用户 所期待的接口 这样可以避免因改动整个代码而产生时间损失 精力损失 财富损失 而改变一个接口可以很好的提高企业开发的效率。其他类型的模式: 在某些分类中,还会提到一些其他类型的模式,例如: ————并发性模式:如生产者-消费者、读写锁等。适配器(Adapter):连接目标接口和被适配者的中间类,实现了目标接口,并持有被适配者对象,以便将请求转发给被适配者。配器模式是一种结构设计模式,它用于将一个类的接口转换成客户端所期望的另一个接口。

m0_74036006的博客 2321

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

校园便利通平台的设计与实现

本文设计并实现了一个基于B/S架构的图书管理系统,采用SpringBoot+Vue技术栈开发。系统分为用户和管理员两个角色,实现图书管理、用户管理、订单处理等核心功能。通过MySQL数据库存储数据,运用MVC模式进行分层设计,确保系统安全性和可扩展性。测试结果表明系统运行稳定,满足功能需求。未来可进一步优化性能并扩展移动端功能。

2401_86117023的博客 300

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++设计模式实战解析:从核心思想到工程应用

设计模式是软件工程中解决常见设计问题的经典方案,其核心思想在于识别并封装变化点,从而提升代码的可维护性和扩展性。从原理上看,设计模式通过抽象与多态、组合优于继承等原则,将易变的实现细节与稳定的接口分离。在C++开发中,这一技术价值尤为突出,它能有效管理对象生命周期、组织复杂类结构、协调对象间协作,从而应对内存安全、性能优化和系统解耦等核心挑战。结合C++的RAII、智能指针、模板等特性,设计模式可广泛应用于游戏引擎、高性能服务器、桌面客户端等场景,帮助开发者构建健壮且灵活的软件架构。本文以工厂方法和观察者模

406

10、C++设计模式与泛型编程

什么是单例:有些时候,我们需要整个程序中有且仅有一个实例单例模式常见场景:如系统日志、Windows资源管理器,数据库分配主键操作等 实现思路 三、观察者模式(Observer) 什么是观察者模式:观察者需要直接订阅目标时间;在目标发出内容改变的事件后,直接接收事件并作出相应,对象常是一对多关系 观察者模式常用场景:各种MVC的框架中,Model的变化通知,各种类型的View几乎都存在这种模式 观察者模式实现思路:将问题的职责解耦合,将Observable和Observer抽象开,分清抽象和实体

qq23001186的博客 848

基于Vue.js的女生向手机商城的设计与实现

本文摘要:本研究设计并实现了一个基于B/S架构的图书管理系统,采用SpringBoot+Vue技术栈构建。系统分为用户和管理员两大角色,实现图书展示、购买、分类管理等功能模块。通过MySQL数据库存储数据,运用MVC模式进行系统分层设计。研究详细阐述了系统需求分析、技术选型、数据库设计和功能实现过程,并进行了严格的测试验证。系统测试结果表明,该图书管理系统运行稳定,功能完整,能够满足图书馆日常管理需求。本文的创新点在于将现代化Web技术与传统图书管理相结合,提升了管理效率和用户体验。未来可进一步扩展移动端应

2401_86779185的博客 48

一篇很全面的IOS面试题(上)

目录 一、基础知识点 二、第三方框架 三、算法 四、编码格式(优化细节) 五、其他知识点 一、基础知识点 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。 1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。 2). MVVM模式:Model View ViewModel ...

JuinDay的博客 669

2018年iOS面试题总结(一)

设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。 1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。 2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。 3). 单例模式:通过static关键词,声明全局变量。在整个进程运行期...

王者归来之英雄有梦 7466

一篇整理的很全面的IOS面试题

目录 一、基础知识点 二、第三方框架 三、算法 四、编码格式(优化细节) 五、其他知识点 本人精心整理了很全面iOS面试题资料,如果你想学想加入我们请关注我私信“面试题”可以领取!!!记住一定要私信 一、基础知识点 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验...

chupanzhuo4827的博客 497

【2017年最新】☞ iOS面试题及答案

设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。 1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。 2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。 3). 单例模式:通过static关键词,声...

anpan0842的博客 559

access两位小数不进位_【2017年最新】 iOS面试题及答案

设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。3). 单例模式:通过static关键词,声明全局变量。在整个进程运行期间只会...

weixin_42510317的博客 151

游戏开发核心架构指南

深入理解游戏开发中的核心架构模式:ECS、MVC、MVP、MVVM、OOP、DOP、FSM、HFSM、事件驱动、GOAP、Behavior Tree、Utility AI、Component、Observer、Ability System

c++、UE 571
上一篇: 数据标准化基础及说明
下一篇: 小型网站优化-资源外链
watsy
博客等级 码龄19年 133粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值