2012-03-06 82 views
1

Test.h範圍非會員的,非靜態變量和方法

class Test 
{ 
public: 
    Test(); 
    //some methods 
private: 
    int var; 
    //some vars 
} 

Test.cpp的

#include "Test.h" 
int a; 

void func() 
{ 
    //some code here 
} 
Test::Test() 
{ 
    //some code 
}  

可變a和功能func()是非構件和非靜態的。

變量a和函數func()的生存期是多少?

考慮將測試類作爲共享庫的一部分。該庫的其他類可以通過解析運算符訪問afunc()嗎?

是什麼變量a/func()靜態聲明和a/func()非靜態聲明之間的區別?

回答

1

MSDN頁面是您的問題的答案。它定義範圍和生命週期。

a自從其全局以來,文件具有整個文件的範圍和生命週期。

func()沒有範圍或壽命。他們只有知名度。

如果其共享庫的一部分也起作用,並且全局變量可以通過提供的庫可見的其他部分訪問。

在這種情況下,靜態並沒有太大的區別。但是,使靜態變量的局部變量獲得全局作用域,但只具有本地可見性。

1

可變a是一個全局變量,它的範圍是整個程序的運行時間即是你的程序啓動時創建和程序退出期間被毀。 func是一個全局函數,函數沒有任何附加範圍的概念。

+3

你在談論對象的生命週期。每個名稱的詞彙範圍是從宣言的角度直到翻譯單位的結尾。 – 2012-03-06 12:15:44

1

變量「a」是Test.cpp 的全局變量,「func」是Test.cpp中的正常函數。 編輯部分: - 但你可以使用相同的變量&方法在不同的地方,如果u做同樣的,如下所示。

//file1.h 
#ifndef FILE1_H 
#define FILE1_H 
extern int a; 
extern void func(); 
#endif  
//end of file1.h 

//file1.cpp 
#include"file1.h"  
int a; // a=0 as it is global variable 
static int x = 10;// Scope is limited, it can only be used in file1.cpp 

static void func2(){ 
    int z = x; 
    z = x+z; 
    //... some thing u r doing  
} 
void func(){ 
    //... some thing u r doing  
}  
//end of file1.cpp 


//file2.cpp 
#include"file1.h" 
//U can use variable "a" & method "func" defined in file1.cpp . For an eg:-  
int add(int b){ 
    func();//func defined in file1.cpp but used here 
    //func2(); //It will throw error if you remove the comment before func2 method as 
       //the scope of func2 is limited to file1.cpp as it is static method 
    return a+b;// a defined in file1.cpp but used here 
}  
int main(){  
    //some code exists here 
    return 0; 
} 

//end of file2.cpp 
//================ 

有很多事情你可以玩弄。它只是一個例子。 就像你聲明靜態全局變量一樣,那個變量的範圍只限於那個文件。

變量「a」&「func」可以被存在於測試類所在的同一文件中的其他類訪問。

如果將任何變量或方法聲明爲靜態全局變量,那麼該變量&方法的作用域限於該文件,如上例所述。

2

變量和函數具有相同的範圍:它們存在於它們的聲明之後。

這是從屬性和一個類,其範圍限於類本身和其中順序事項更少(雖然它可能...爲類型)的方法比較不同。

1

C++中的範圍,由C++ 11§3.3.1/ 1中所定義,是文本(可能不連續)區,其中一個名稱可用於不合格來指代相同的實體。

A 潛在作用域是在潛在作用域內沒有相同名稱的聲明時名稱的作用域。

變量名稱和函數名稱的範圍從聲明擴展到文件末尾。