область видимости не членских, не статических переменных и методов - PullRequest
1 голос
/ 06 марта 2012

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()?

Ответы [ 5 ]

2 голосов
/ 06 марта 2012

Переменные и функции имеют одинаковую область действия: они существуют с момента их объявления.

Это относительно отличается от атрибутов и методов класса, область действия которого ограничена самим классом и где порядок имеет меньшее значение (хотя это может ... для типов).

1 голос
/ 07 марта 2012

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

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

func() не имеет области действия или времени жизни.они имеют видимость.

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

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

1 голос
/ 06 марта 2012

В C ++ scope , определенный в C ++ 11 §3.3.1 / 1, представляет собой (возможно, непрерывно) область текста , где имя может использоваться без определенияссылаются на одну и ту же сущность.

A потенциальная область действия - это область действия, которую будет иметь имя, если в потенциальной области действия нет объявлений с тем же именем.

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

1 голос
/ 06 марта 2012

Переменная «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» доступна для других классов, присутствующих в том же файле, где присутствует тестовый класс.

Если вы объявите какую-либо переменную или метод в качестве статической глобальной переменной, тогда область действия этой переменной и метода будет ограничена этим файлом, как описано в примере выше.

1 голос
/ 06 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...