(C++) 연산자오퍼레이터(::)

1. :: 범위 연산자 (scope operator)

이 연산자는 3가지 방식으로 사용된다.

첫번째, 전역변수명


일반적으로 전역변수와 지역변수의 이름이 동일한 경우 지역변수가 우선시 됩니다.
전역 변수가 지역변수에 의해 가려진다고 하는데요, 이런 경우에도 전역변수 사용이 가능합니다.

#include<stdio.h>
int ex = 1;

int main()
{
 int ex = 2;
ex + =2;   //동일 이름의 변수가 존재시 지역변수가 우선
::ex += 1; // :: 연산자를 사용해 전역변수를 사용.
retrun 0;
}




두번째, class명 ::멤버

나중에 class쪽에서 자주 보겠지만 클래스나 구조체에서 만든 함수를 정의 할 때 사용됩니다.

void Persion::prn()
{

}


세번째, ::외부함수 (전역함수)


c에서는 함수가 main()이 아니면 사용자 함수(내가 정의한 함수)가 기본적이었는데,
클래스나 구조체에서는 함수를 정의하는게 존재하여 함수의 "소속"에 의미가 생겼다.


일반적으로 main() 밖에 사용자가 정의하던 그냥 "함수"를 "전역함수" 라고 한다.
다른 사용자 함수 어디서든 사용이 가능하기 때문이다.

클래스 안에서 만든 함수를 "멤버함수"라고 하는데,
이 "멤버함수" 와 "전역함수"는 함수명이 같아도 된다. 기존에 C에서는 함수명이 중복될 수 없다.

여기서는 오버로딩이라는 개념이 있긴한데, 그 개념이랑은 조금 다릅니다.


바로 "소속"이 다르기 때문이다. 전역함수는 어디에도 소속되지 않은 함수이다.
반면 멤버함수는 클래스 안에 속해있다. 그렇다 보니 멤버함수는 외부에서 단독으로 사용되지 못한다.


클래스명.멤버함수명 또는 클래스명::멤버함수명 으로 사용된다.


따라서 전역함수 prn()과 Person::prn()은 서로 구분이 가능해 진다.


#include<stidio.h>

class Person
{
private :
 int age;

publc :
  void test();
  void prn();
}


void Person::test()
{
 prn(); //멤버함수 prn 호출
::prn(); //전역함수 prn 호출
}

void Persion::prn()
{
cout << "난 멤버함수야"<<endl;
}

int main()
{
Person p1;
p1.test(); //p1에 test() 함수 호출

return 0;
}

void prn()
{
 count<<"난 전역함수야"<<endl;
}



댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬