关于全局变量的好处,和坏处,在此不说了,还没毕业的大学生基本上对全局变量都有认识。

在此,我只记录下今天的感悟!!!

首先来看一个程序:

这里面有2个QLineEdit,一个QLineEdit一秒+1,另外一个半秒+1

运行截图如下:

这个是正常的状态,源码如下:

mylineedit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H#include <QLineEdit>class MyLineEdit : public QLineEdit
{Q_OBJECT
public:MyLineEdit(QWidget *parent = 0);void setStartTime(const int time);protected:void timerEvent(QTimerEvent *event);private:int m_num;
};#endif // MYLINEEDIT_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

mlineedit.cpp

#include "mylineedit.h"
#include <QTimerEvent>
#include <QDebug>MyLineEdit::MyLineEdit(QWidget *parent) : QLineEdit(parent)
{m_num=0;
}void MyLineEdit::setStartTime(const int time)
{startTimer(time);
}void MyLineEdit::timerEvent(QTimerEvent *event)
{Q_UNUSED(event)m_num++;this->setText(QString::number(m_num));
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit->setStartTime(1000);ui->lineEdit_2->setStartTime(500);
}Widget::~Widget()
{delete ui;
}

然而如果把m_num改成全局变量的就会发现很搞笑的事情!

运行截图如下:

改动源码如下:

mylineedit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H#include <QLineEdit>class MyLineEdit : public QLineEdit
{Q_OBJECT
public:MyLineEdit(QWidget *parent = 0);void setStartTime(const int time);protected:void timerEvent(QTimerEvent *event);private:};#endif // MYLINEEDIT_H

mylineedit.cpp

#include "mylineedit.h"
#include <QTimerEvent>
#include <QDebug>int m_num=0;MyLineEdit::MyLineEdit(QWidget *parent) : QLineEdit(parent)
{
}void MyLineEdit::setStartTime(const int time)
{startTimer(time);
}void MyLineEdit::timerEvent(QTimerEvent *event)
{Q_UNUSED(event)m_num++;this->setText(QString::number(m_num));
}

总结:

从这里面可以看到,当某一个类,要有多个实例的实例的时候,除非多线程,抢临界资源这种情况,其他情况就非常不合适全局变量,而一个类只有一个实例(单例模式)这种情况,就可以使用全局变量,简化逻辑,当然,这可能对后期的维护有影响。

C++工作笔记-对全局变量的进一步认识(何时适合用,何时不适合用)相关推荐

  1. Java工作笔记-对反射的进一步理解

    目录 基本概念 代码与实例 基本概念 反射的进一步理解: 将类的各个组成部分封装为其他对象(将一个类的组成部分封装为其他对象) 就是反射. Java代码经历的三个阶段: 1. 写好代码.java后使用 ...

  2. C++工作笔记-对继承的进一步认识

    这篇博文将说明我对继承的进一步理解. 比如在图形碰撞的时候,如果能让他继承一个类,那个类设置一个flag,就可以对不同的图形进行不同的碰撞分析,那么这里就可以用父类指针,去指向子类,然后读取子类里面和 ...

  3. Qt工作笔记-对setupUi(this)进一步理解

    今天工作中,在构造函数中忘记了调用setupUi,使得程序中某些指针异常. 如下图的程序,当什么不做的时候,界面是这样的: 当把ui->setupUi(this)注释掉后 这里先看下setupU ...

  4. Qt工作笔记-对QImage的进一步认识(关于α通道)

    一般的点阵图BMP图,是没有α通道的,如下图所示: 而在写OpenGL的程序时候,往往要得到图像的数据位的数据,不用框架,使用FILE很容易就可以获取图像的数据, 如下图: 但用框架将更为方便: 代码 ...

  5. C++工作笔记-对static_cast的进一步认识(强制转换改变内存,并且删除存在的问题)

    static_cast关键字(编译时类型检查) 代码如下: #include <iostream> using namespace std; class Base{ public :Bas ...

  6. Qt工作笔记-对QXmlStreamReader的进一步认识(读取XML)

    代码如下: #include <QApplication> #include <QDebug> #include <QFile> #include <QVec ...

  7. 罗辑思维在全链路压测方面的实践和工作笔记

    业务的知名度越高,其背后技术团队承受的压力就越大.一旦出现技术问题,就有可能被放大,尤其是当服务的是对知识获取体验要求颇高的用户群体. 提供知识服务的罗辑思维主张"省时间的获取知识" ...

  8. maximo工作笔记

    maximo工作笔记 xml学习: 多选框: <hdcheckboxgroup id="1339230676937" label="作业类型" dataa ...

  9. 系统架构工作笔记-数据展示进程与读取数据进程分离,实现低耦合(展示软件可适用任意厂家数据库)

    目录 背景 实践环境 逻辑结构图 运行截图 数据展示进程源码 服务进程(插件调用)源码 插件源码 MySQL相关 背景 工作一年零1个月了(加上实习),靠着工作中学到的东西,花了周末2天时间,做了一个 ...

最新文章

  1. 用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
  2. 跟无闻学习GO Web 编程(四) -- bee 工具使用
  3. 艾伟:WCF从理论到实践(11)-异步
  4. Python序列的增量赋值
  5. Delphi保存网页中的图片
  6. matlab表示时间集合,matlab集合操作
  7. @classmethod的使用
  8. zabbix客户端掉线查看进程time_wait过多
  9. RocketMQ 延时消息的使用和延时级别的配置
  10. ssr客户端android!Android开发真等于废人?看看这篇文章吧!
  11. oppo A3怎么刷机oppo A3的刷机教程 oppo A3完美解除账号锁
  12. 用Vue3+element-plus+express写个简单的后台管理框架
  13. 微信小程序开发之路(3)— 添加一个Button按钮点击事件
  14. 已安装pywinrm,仍报错winrm or requests is not installed: No module named winrm
  15. 软件测试创业公司和大厂外包如何选择?
  16. r语言员工离职_使用R机器学习进行员工离职预测系列(一)
  17. mysql 用idb文件恢复数据
  18. 评论:“哭不起”的王君为何还流泪
  19. 比例运算电路(multisim实现)
  20. php45 上海北诺,Bio-Gel P6 生物胶P100 Bio-Rad 150-1940

热门文章

  1. 大一萌新看过来,C语言学到什么程度,才能“毕业不失业”!
  2. 数字化赋能智能生产,一套数据决策分析体系,完美解决生产管理
  3. C++效率在此笔者不想通过反汇编来实验
  4. 关于CompleteWithAppPath函数,CompleteWithAppPath(aFileName)
  5. 用VC写Assembly代码(4)
  6. 教你一招用python发送QQ邮件
  7. python自动化入门操作文档,写得如此清晰明了,忍不住让人点赞
  8. 各个阶级的前端 必须掌握的基本技能汇总
  9. 苹果电脑连服务器传文件慢,两个mac之间快速传递文件
  10. delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用