1.變量的定義:變量的定義用於為變量分配存儲空間,還可以為變量指定初始值。在一個程序中,變量有且僅有一個定義。
2.變量的聲明:用於向程序表明變量的類型和名字。程序中變量可以聲明多次,但只能定義一次
-
變量的聲明有兩種情況
(1) 一種是分配內存空間的(聲明)。例如:int a在聲明的時候就已經分配了內存空間。
(2) 另一種是不需要分配內存空間的(聲明)。例如:extern int a其中變量a是在別的文件中定義的。第一種是"定義性聲明",或者稱為”定義",第二種是"引用性聲明"。可以理解為聲明中包含着定義,但是並非所有的聲明都是定義, 例如:int a既是聲明,同時又是定義。然而對於extern a來講它只是聲明不是定義。
3.定義和聲明的區別
一般的情況下我們常常這樣敘述,把分配內存空間的聲明稱之為"定義",把不需要分配內存空間稱的聲明之為"聲明"。
extern int a; //聲明
int b; //定義
int b=1; //初始化
b=2; //賦值
//另外在定義的時候也可以初始化,也就是我們常用的寫法
int c=3;
4.為什么需要區分聲明和定義:
C++程序通常由許多文件組成。為了讓多個文件訪問相同的變量,C++區分了聲明和定義。任何在多個文件中使用的變量都需要既有定義又有聲明。在這種情況下,在一個文件中定義了變量,在其他使用改變了的文件中則只能包含變量的聲明(不能再包含定義,因為變量只能定義一次)。
5.真正用的時候 這種需要被別的文件用的變量,必須在本文件中定義好,比如在文件1中定義int i=0;然后才可以再別的文件中使用,使用方式是:在類體的外部使用extern int i;這樣在這個類中就可以使用該外部變量了,再次強調必須先定義好,才能再別的地方通過extern聲明使用。例:
#include <QDebug>
#include "myclass.h"
int test_i;//定義 等同於 extern test_i =0;
MyClass::MyClass(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
qDebug()<<test_i;
}
MyClass::~MyClass()
{
}
#include "YourClass.h"
//#include "myclass.h"
extern int test_i;//在此類類體外部聲明,在此類中即可使用
YourClass::YourClass(void)
{
test_i++;
}
YourClass::~YourClass(void)
{
}
