개발나라 스용공주

[C++] #005 범위 지정 연산자(::)의 형태와 예제 출력해보기 Structure of :: and Printing Example of C++ with Visual Studio 2022 본문

C++

[C++] #005 범위 지정 연산자(::)의 형태와 예제 출력해보기 Structure of :: and Printing Example of C++ with Visual Studio 2022

스용공주 2023. 2. 25. 23:19
728x90
728x90

오늘은 범위 지정 연산자(::)에 대해 알아보도록 하겠습니다.

 

우선 범위 지정 연산자란 ::의 형태를 하고 있습니다.

상세한 뜻과 사용법 등을 알아보겠습니다.

 

 


 

 

[ 1. 범위 지정 연산자 (::)란? ]

C++에서 가장 우선순위가 높은 연산자로 여러 범위에 사용된 식별자를 식별하고 구분하는데 사용되며 변수, 함수, 열거체가 올 수 있습니다. 한마디로 정리하자면 함수나 변수명을 namespace에 따라 구분 시 사용됩니다.

* namespace란? 변수나 함수들이 선언된 범위, 묶음을 일컷는 '명칭 영역'을 의미하며 변수, 함수, 구조체, 클래스 등을 구분하기 위해 이름으로 사용되는 다양한 내부 식별자를 가지고 있는 것입니다. 프로그램이 복잡해지고 여러 라이브가 포함될 수록 내부 식별자 간의 충돌 가능성이 증가되므로 이 충돌 문제를  namespace를 통해 해결할 수 있습니다.

 

[ 2. 범위 지정 연산자 사용 형태 ]

범위 지정 연산자의 사용 형태 다음과 같습니다.

- 범위 지정 연산자를 변수 이름 앞에 붙이면 해당 변수는 전역으로 사용하라는 의미

- 클래스에 이 연산자를 사용하면 namespace 멤버를 식별하거나 클래스의 정적 멤버를 호출할 수 있음

 

 

 


예제는 다음과 같습니다.

 

class A에 string형의 taste()라는 멤버 함수를 헤더에 만들어주고 만들어진 taste()라는 함수는 string형이기 때문에 반환값으로 "A::taste() called"라는 함수가 호출되었다는 문구를 띄웁니다. 그리고 이 함수는 main()에서 클래스 A를 가리키는 포인터 a를 선언하여 클래스 A가 담을 수 있는 공간을 new를 통해 만들어주고 출력함수 안에  a가 클래스 A의 멤버 함수 taste()를 가리키도록 하여 함수를 호출해주는 형태입니다.

 

 

[헤더파일 : 01_Test.h]

#pragma once

class A
{
public:
	string taste();
};

클래스 A 안에 public으로 string형의 함수 taste()를 선언해줍니다.

 

 

 

[C++파일 : 01_Test.cpp]

#include "Stdafx.h"
#include "01_Test.h"


int main()
{
	A* a = new A;
	cout << a->taste() << endl;
	return 0;
}

string A::taste()
{
	return "A::taste() called";
}

여기에서 new는 '자유 기억 공간'이고 메모리 공간에 객체를 위한 메모리를 할당 받는 역할을 한다. 위에서는 클래스 A만큼의 공간을 포인터 a에 할당해준 것이다.

::는 taste()가 헤더에 명시되어져 있는 것처럼 클래스 A안에 있는 것을 표현해주는 역할을 하기 위해 위와 같이 A::의 형태로 작성되었다.

[결과]
A::taste() called

 

 

01_Test.cpp에서 string A::taste()에서 ::(범위지정연산자)가 사용된 것을 확인할 수 있다.

문자형인 클래스 A에 있는 멤버 함수 taste()를 호출하고자 string A::taste()의 형태로 사용되었다.

 

이렇게 위와 같이 범위 지정 연산자 (::)는 네임스페이스(class) 멤버를 식별해주는 역할을 하는 것을 확인할 수 있다.

 

 

여기서 만약 서로 다른 클래스 A와 B에서 둘 다 똑같이 Hello()라는 함수를 선언하고 있다면?
범위 지정 연산자를 통해 A::Hello()와 B::Hello()와 같이 어떤 범위에 있는 Hello()함수인지 표시해주면 서로 다른 영역에 위치한 다른 함수라는 것을 표현할 수 있게된다.

 

 

 

 


[이 글과 더불어 참고할 C++ 이론 포스팅]

 

접근제어지시자, 구조체 : .과 ->의 차이와 활용법 추후 업로드 예정

728x90
728x90
Comments