关于虚函数的简单例子

首先是一个很简单例子,刚学C++的朋友都能理解

源码如下:

#include <cstdio>
#include <windows.h>static int criticalRes = 1;      //critical resourceclass Base {
public:virtual void print() {printf("print called in Base Class!\n");//critical resource will be modified by Base ClasscriticalRes *= 1000;}
};class Child:public Base {
public:virtual void print() {   // "virtual" can be removed or reserveprintf("print called in Child Class!\n");criticalRes -= 1;Base::print();printf("The criticalRes's value is %d\n", criticalRes);}
};void main() {Child *child = new Child;child->print();delete child;getchar();
}

运行截图如下:

程序逻辑:先把临界资源的值减少了1,再调用父类的函数,乘1000。

把代码改下:

#include <cstdio>
#include <windows.h>static int criticalRes = 1;      //critical resourceclass Base {
public:virtual void print() {printf("print called in Base Class!\n");//critical resource will be modified by Base ClasscriticalRes *= 1000;}
};class Child:public Base {
public:virtual void print() {   // "virtual" can be removed or reserveBase::print();printf("print called in Child Class!\n");criticalRes -= 1;printf("The criticalRes's value is %d\n", criticalRes);}
};void main() {Child *child = new Child;child->print();delete child;getchar();
}

运行截图如下:

程序运行逻辑:先调用父类把临界资源的指乘了1000,再减少了1。

在Qt中应该注意的问题

上面那个只是小小的知识点,在Qt中,要利用这个特性,完成我们想要达到的功能。

比如上次说的三只小猪的例子【链接如下:https://blog.csdn.net/qq78442761/article/details/82182054】

给出鼠标单击时候的代码:

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{if(index.data().canConvert<MyPic>()){//qDebug()<<"can be convert!";MyPic mypic=qvariant_cast<MyPic>(index.data());mypic.paint(painter,option.rect,option.palette);}else{qDebug()<<"can't be convert!";}QStyledItemDelegate::paint(painter, option, index);
}

运行截图如下:

这种运行太令人糟糕了,我们不要他被覆盖掉!

改成如下的代码:

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{QStyledItemDelegate::paint(painter, option, index);if(index.data().canConvert<MyPic>()){//qDebug()<<"can be convert!";MyPic mypic=qvariant_cast<MyPic>(index.data());mypic.paint(painter,option.rect,option.palette);}else{qDebug()<<"can't be convert!";}
}

运行截图如下:

Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)相关推荐

  1. C++工作笔记-对友元函数的进一步理解

    这里在GitHub上看redis相关的代码发现的.再次记录下. 友元的特点就是他是普通函数,并不是成员函数.他可以调用这个类的私有成员. 这里有个实际用法: 如上的redisAsyncCommand函 ...

  2. C++工作笔记-对纯虚函数的进一步理解(作用)

    对纯虚函数的理论不再说明. 本篇博文是为了说明他这个功能 代码如下: #include <iostream> #include <QString> #include <Q ...

  3. 提高C++性能的编程技术笔记:虚函数、返回值优化+测试代码

    虚函数:在以下几个方面,虚函数可能会造成性能损失:构造函数必须初始化vptr(虚函数表):虚函数是通过指针间接调用的,所以必须先得到指向虚函数表的指针,然后再获得正确的函数偏移量:内联是在编译时决定的 ...

  4. Qt|C++工作笔记-QVector与Vector去重复的值

    Qt中没有unique函数,只能用遍历的方法了,代码如下: #include <QApplication> #include <QDebug> #include <QSt ...

  5. Qt工作笔记-对QThread使用的进一步认识(exec及对象在哪个线程创建)

    目录 基本概念 代码与实例 基本概念 这里有个官方例子,如下: class WorkerThread : public QThread{Q_OBJECTvoid run() override {QSt ...

  6. Qt|设计模式工作笔记-对单例模式进一步的理解(静态加单例实现专门收发UDP对象)

    目录 理论 源码 理论 这里只说明一点,使用单例模式,私有成员里放一个成员,这个成员是一个静态成员,把构造函数都屏蔽掉(放到protected或者private中即可)使用一个flag,让其只能生成一 ...

  7. Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示

    逻辑: 1.使用QProcess在开线程前设置输出文件[setStandardOutputFile]; 2.开一个线程,去专门调用shell命令,比如ping: 3.Qt读取重定向文件,进行界面显示: ...

  8. Qt工作笔记-QGraphics重设场景坐标【标签:Qt图形框架】

    Qt图形框架里面场景的坐标是以最中间为0,0点 作为新一辈的程序员,我是感觉到很新颖,但为了兼容其他的程序(图形要生成坐标,给其他程序读),要重设坐标点,把他搞为最左上为0,0点. 当没重设坐标点时, ...

  9. Qt/C++工作笔记-vector与QVector的拷贝复制(区别与联系)

    [注意:不要一个个遍历去赋值,有专门的函数可以拷贝复制] 首先是传统的vector. 他的拷贝复制有3种,一是构造函数,二是利用assign函数,三是利用swap函数. 代码如下: #include ...

最新文章

  1. 2020牛客多校第三场[C Operation Love+基础计算几何 判断多边形顺逆时针]
  2. ML之LSOLS:LSOLS算法的简介、论文、算法的改进(最佳子集选择OFSS法、前向逐步回归FSR法)、代码实现等详细攻略
  3. openbsd 禁止root远程登陆
  4. linux ll命令无效
  5. ie 浏览器布局中的 offset
  6. 【Flink】Object Reuse 模式(Stream API) 性能优化 chain 数据重用 不深拷贝
  7. 程序设计用户生日怎么发推送_生日祝福:儿子生日怎么发朋友圈说说 儿子生日怎么写祝福语...
  8. python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式...
  9. CentOS 7 下的LVM 实战
  10. redis 获取不到_redis系列之——缓存穿透、缓存击穿、缓存雪崩
  11. 网络安全专栏——了解防火墙(图文介绍天网个人防火墙,实例测试)
  12. 2023年的深度学习入门指南(14) - 不能只关注模型代码
  13. echarts的中国地图,点击进入省级地图,按需加载对应的省js,可返回中国地图
  14. 弘辽科技:拼多多活动布局三大招!
  15. 面试问烂了的测试用例: 登录界面的测试用例
  16. 《控制系统设计指南》_George Ellis著_部分章节读书笔记
  17. 达拉斯24_在BDConf 2012上:达拉斯
  18. 桌球游戏java_JAVA 第一个小项目 桌球游戏 (桌球小程序练习)
  19. 1221条电脑蓝屏代码大全
  20. GridExcel支持无实体类读写Excel文件

热门文章

  1. IDC、刘润:企业如何通过数字化转型,驱动业务发展?附98页PPT
  2. 针对新人的:Python最佳学习路线
  3. 飞鸽传书创造出自己的一片天吧
  4. 用CComPtr吧,COM接口指针很危险
  5. 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持
  6. 开发和编程是一样的吗?区别有哪些?
  7. css实用技巧:巧用css实现两栏等高布局
  8. php判断数组中的键是否是某个字符串,php判断数组中是否存在指定键(key)的方法...
  9. linux 蓝牙脚本,linux下蓝牙开发(bluez应用)
  10. mysql 清理 reley_MySQL日志相关