2012-03-06 2 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()?

Рассмотрите класс Test как часть общей библиотеки. Могут ли другие классы этой библиотеки получить доступ к a или func() оператором разрешения?

В чем разница между статической декларацией переменного a/func() и нестатической декларацией a/func()?

ответ

1

Страница MSDN - это ответ на ваш вопрос. Он определяет область действия и время жизни.

a имеют объем и продолжительность жизни через весь файл с момента его создания.

func() не имеет объема или срока службы. они имеют только видимость.

, если его часть разделяемой библиотеки также функционирует, а глобальные переменные могут быть доступны с помощью других частей, предоставляемых библиотекой.

В этом случае статичность не имеет большого значения. Но локальные переменные при статическом режиме становятся глобальными, но будут иметь только локальную видимость.

1

Переменная a - это глобальная переменная, ее область действия - это полная исполняемая программа, созданная во время запуска вашей программы и уничтоженная во время выхода программы. func - глобальная функция, и функции не имеют никакого понятия сферы, к которой они прикреплены.

+3

Вы говорите об объекте жизни. Лексическая область каждого имени находится от точки объявления до конца единицы перевода. –

1

Переменная «a» является глобальной переменной Test.cpp , а функция «func» является нормальной функцией в Test.cpp. Редактировать раздел: - Но вы можете использовать ту же переменную & в другом месте, если вы делаете то же самое, что указано ниже.

//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 потенциальная область действия - это область, которую имя будет иметь, если в потенциальной области нет объявлений с одинаковым именем.

Область действия имени переменной и имени функции простирается от декларации до конца файла.

Смежные вопросы