C++|Qt笔记-关于extern和namespace的区别与联系
目錄
?
前言
關于extern的認識
關于namspace的認識
關于namespace在Qt中的認識
?
前言
工作了一年半了(如果加實習就19個月了),對C/C++有了新的認識,關于extern和namespace也有了進一步認識,在此記錄下!
?
關于extern的認識
先上一段代碼,運行截圖如下:
源碼如下:
Head1.h
#ifndef HEAD1_H #define HEAD1_H#include <iostream> using namespace std;int value1 = 9999;void printHead1Value(){cout << "printHead1Value : " << value1 << endl; }#endifHead2.h
#ifndef HEAD2_H #define HEAD2_H#include "Head1.h"extern int value1;void printHead2Value(){cout << "printHead2Value : " << value1 << endl; }void changeValue(){value1 = -1; }#endifmain.cpp
#include "Head2.h"int main(int *argc, int *argv[]){cout << "The value1 is :" << value1 << endl;printHead1Value();changeValue();printHead2Value();printHead1Value();getchar();return 0; }這里通過使用extern,就可以調用不同文件的變量,但是如果在main.cpp中創建一個同名的全局value1,就會報錯,如下
報錯如下:
這個方式,個人感覺的確有缺陷,不太好,所以就有了C++的namespace。
?
關于namspace的認識
運行截圖如下:
源碼如下:
Head1.h
#ifndef HEAD1_H #define HEAD1_H#include <iostream> using namespace std;namespace HelloWorld{int goloab = 1000;void printValue(){cout << "HelloWorld printValue : " << goloab << endl;} }#endifHead2.h
#ifndef HEAD2_H #define HEAD2_H#include <iostream> using namespace std;namespace IamFineThankYou{int goloab = 998;void printValue(){cout << "IamFineThankYou printValue : " << goloab << endl;} }#endifmain.cpp
#include "Head1.h" #include "Head2.h"int goloab = 8888;int main(int *argc, int *argv[]){cout << "The goloab is : " << goloab << endl;HelloWorld::printValue();IamFineThankYou::printValue();getchar();return 0; }通過namespace就可以很好的解決extern中存在的問題,并且還可以搞很多同名的函數。感覺這個namespace的確是很方便,下面是本人對namespace在Qt中的認識。
?
關于namespace在Qt中的認識
如下的程序結構:
這里只看2個.h文件
form.h
#ifndef FORM_H #define FORM_H#include <QWidget>namespace Ui { class Form; }class Form : public QWidget {Q_OBJECTpublic:explicit Form(QWidget *parent = nullptr);~Form();private slots:void on_pushButton_clicked();private:Ui::Form *ui; };#endif // FORM_Hwidget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::Widget *ui; };#endif // WIDGET_H這里可以看到2個.h文件,都有nameSpace Ui class Widget。另外一個是Form,這里要注意了
因為命名空間的不同,這兩個是不同的類,點進去就可以看到!進入了ui_widget.h或ui_form.h,
下面來看看ui_form.h的部分代碼!
發現Form中他繼承了Ui_Form
就有了setupUi這個函數。從中可以看到。namespace這個把每一個界面都給它隔開了,通過這樣的方式,也就實現了Qt中界面與邏輯業務的分離!
總結
以上是生活随笔為你收集整理的C++|Qt笔记-关于extern和namespace的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++笔记-远程线程注入
- 下一篇: Qt笔记-windows下拷贝文件夹中所