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

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

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

 

首先来看一个程序:

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

运行截图如下:

C++工作笔记-对全局变量的进一步认识(何时适合用,何时不适合用)_第1张图片

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

mylineedit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H

#include 

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 

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

mlineedit.cpp

#include "mylineedit.h"
#include 
#include 

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改成全局变量的就会发现很搞笑的事情!

运行截图如下:

C++工作笔记-对全局变量的进一步认识(何时适合用,何时不适合用)_第2张图片

改动源码如下:

mylineedit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H

#include 

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 
#include 

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/C++,Qt,工作笔记)