2012-03-06 3 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()의 수명은 어떻게됩니까?

테스트 클래스를 공유 라이브러리의 일부로 간주하십시오. 해당 라이브러리의 다른 클래스는 해결 연산자로 a 또는 func()에 액세스 할 수 있습니까?

변수 a/func() 정적 선언 a/func()의 비 정적 선언 차이는 무엇인가?

답변

1

MSDN 페이지는 질문에 대한 답변입니다. 범위와 수명을 정의합니다.

a은 글로벌 이후 파일을 통해 범위와 수명을가집니다.

func() 범위 또는 수명이 없습니다. 그들은 오직 가시성을 가지고 있습니다.

라이브러리가 제공되는 다른 파트에서 공유 라이브러리의 일부도 전역 변수에 액세스 할 수 있으면 해당 라이브러리가 표시됩니다.

이 경우 정적 인 것은 별 효과가 없습니다. 그러나 static으로 만들 때 지역 변수는 전역 범위를 갖지만 로컬 가시성 만 갖습니다.

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

변수와 함수는 같은 범위를 갖습니다. 선언의 시점부터 존재합니다.

클래스의 속성 및 메서드와 클래스의 범위가 제한되어 있고 순서가 중요하지 않은 클래스의 메서드와 상대적으로 다릅니다 (형식이 ...일지도 모르지만). C에서

1

는 C++ §3.3.1 11/1로 정의 된 범위을 ++ 이름이 동일한 실체를 참조하는 비정규 사용될 수있는 텍스트의 (아마도 불연속) 영역이다.

잠재적 범위은 잠재적 범위 내에서 같은 이름의 선언이 없을 때 이름이 가질 범위입니다.

변수 이름과 함수 이름의 범위는 선언에서 파일의 끝까지 확장됩니다.