静态指针成员的妙用(类内静态变量指针 与 全局变量指针 之定义方法的区别)

这个例子的用途:

将 MainWindow 的 statuBar指针开放出来,使得所有的 cpp都能够使用这个 statuBar。

1. 一般指针全局变量的定义方法

//1. 声明:在适当的地方进行

extern QStatusBar *pMainWindowStatuBar;

//2. 定义:

QStatusBar *pMainWindowStatuBar =nullptr;

//3. 初始化
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    pMainWindowStatuBar =ui->statusBar;

//4. 使用
pMainWindowStatuBar->showMessage("Test");


 

2. 在“类”中定义静态指针变量的方法

关键:理解在类中定义C语言定义,在方法的差异

static QStatusBar *pMainWindowStatuBar; // 声明。需要 static

QStatusBar * MainWindow::pMainWindowStatuBar =nullptr; //定义

NG: static QStatusBar * MainWindow::pMainWindowStatuBar =nullptr; //错误,这里不需要 static,否则,Qt Creator会报错。

关键区别:在 C语言中的定义,与在 C++中的声明之区分。

  1. x1. C语言定义:static QStatusBar *pMainWindowStatuBar; // 这是定义
  2. x2. C++声明:static QStatusBar *pMainWindowStatuBar; // 在类内,这是声明
  3. x3. C++定义:QStatusBar * MainWindow::pMainWindowStatuBar =nullptr; //定义。不需要 static

  • x1 和 x2 :静态的C语言定义” 和 类内静态的C++声明”,在外形上是一致的?
  • C语言声明:需要使用 extern关键字。 C++在这里能使用 extern;但在使用时,需要加上::,这是C++里的"作用域分解运算符"。

//1. 声明:mainwindow.h
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
static QStatusBar *pMainWindowStatuBar; // 声明

//2. 定义:mainwindow.cpp
QStatusBar * MainWindow::pMainWindowStatuBar =nullptr;

//3. 初始化:mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    MainWindow::pMainWindowStatuBar =ui->statusBar; //初始化

//4. 使用
MainWindow::pMainWindowStatuBar->showMessage("Test 222222");

参考:

静态指针成员的妙用_贝勒里恩的博客-CSDN博客

2.1、声明静态成员

class Test {
	public:
		Test();
		~Test();
		
		//声明一个本类的静态指针
		static Test *test;
}

2.2、定义并初始化静态成员(类外)

#include "Test.h"

//定义并初始化静态成员
Test* Test::test = NULL;

Test::Test()
{
	
}

Test::~Test()
{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值