영역 결정 연산자(Scope Resolution Operator, ::)

C/C++ 2013. 5. 28. 20:17

C언어에서는 지역변수가 전역변수 보다 우선 순위를 갖는다. 이 지역변수의 사용영역(Scope) 밖에서만 전역변수에 접근을 할 수 있다.


하지만, C++에서는 같은 변수명을 갖는 지역변수의 사용영역 안에서도 영역 결정 연산자 ::를 붙여 전역변수에 접근을 가능하게 하고 있다.


int var = 100;

 

int main()

{

 int var = 200;

 

cout << ::var << endl;

 



실행결과

 

100


MFC 프로그래밍 팁 

 

영역 결정 연산자는 함수명 앞에 사용될 수 있다. 클래스의 멤버함수를 사용할 때 클래스명 다음에 영역 결정 연산자가 사용될 때는 해당 클래스에 속해 있는 함수임을 나타낸다. 

 

CWnd::MessageBox(_T("Hello~")); 

 

위 코드는 MessageBox 함수가 CWnd 클래스에 속해 있는 멤버함수라는 의미가 된다.

 

그러나 같은 이름으로 된 전역함수인 경우에는 함수명 앞에 그냥 영역 결정 연산자를 붙인다.

 

::myFunction( ~ ); 

반응형

private, public, protected 공부

C/C++ 2013. 5. 28. 19:41

private : 이 속성을 가지는 멤버는 외부에서 액세스할 수 없으며, 구조체의 멤버 함수만 액세스할 수 있다.

외부에서는 프라이비트 멤버를 읽을 수 없음은 물론이고 존재 자체도 알려지지 않는다. 


public : 이 속성을 가지는 멤버는 외부로 공개되어 누구나 읽고 쓸 수 있고 함수의 경우는 호출할 수 있다.

구조체가 자신의 속성이나 동작을 외부로 공개하는 수단이 되며 퍼블릭 멤버를 소위 인터페이스라고 한다. 


protected : private와 마찬가지로 외부에서는 액세스할 수 없으나 단, 상속된 파생 클래스는 이 멤버를 액세스할 수 있다.

프라이비트 멤버는 파생 클래스에서조차도 참조할 수 없으며 오로지 자신만이 이 멤버를 참조할 수 있다는 점이 다르다. 


struct Test{

private:

int num;

char str;

void Initialize();

public:

int i;

int j;

void func(int n);

protected:

float k;

};


void main()

{

Test test;

test.num=1; // 에러

test.i=10; // 대입 가능

test.func(3); // 호출 가능

test.Initialize(); // 에러


반응형

컬러공간 변환

OpenCV/my_source 2013. 5. 21. 14:15

BGR >> GRAY

// BGR -> GRAY

Mat ColorToGray(Mat& src)

{

Mat gray;

assert(src.type() != CV_8UC3);

vector<Mat> channels;

split(src,channels);

gray = (0.333 * channels[0]) + (0.333 * channels[1]) + (0.333 * channels[2]);


return gray;

}


반응형

'OpenCV > my_source' 카테고리의 다른 글

컬러 추출후 해당 컬러 보여주기2  (0) 2013.09.03
컬러 추출후 해당 컬러 보여주기  (0) 2013.09.03
[콘솔]마우스 이벤트  (0) 2013.08.20