코딩 기초 17편 _ C++ 범위 지정 연산자와 멤버 포인터 연산자 예제 코드 및 설명
안녕하세요?
지식아일랜드의 모르는게 없는 지식인 입니다.
오늘은 C++ 코딩의 범위 지정 연산자(Scope resolution operator)와
멤버 포인터 연산자(pointer-to-member operator)에 대해 설명드리겠습니다.
범위 지정 연산자(Scope resolution operator)
#include <isotream>
using namespace std;
int x = 10; // 전역 변수 선언
int main() {
int x = 5; // 지역 변수 선언
cout << "지역 변수 x의 값: " << x << endl;
cout << "전역 변수 x의 값: " << : :x << endl; // scope resolution operator
return 0;
}
이 예제 코드는 ': :' 스코프 결정 연산자를 사용하여 전역 변수와 지역 변수를 구별하는 방법을 보여줍니다.
위 코드에서 'int x = 10;'으로 전역 변수 'x'가 선언됩니다.
'main()' 함수 안에서 'int x=5;'로 지역 변수 'x'가 선언됩니다.
'cout << "지역 변수 x의 값: " << x << endl; ' 라인은 'main()' 함수 안에서 선언된 지역 변수 'x'의 값을 출력합니다.
이 값은 '5'입니다.
'cout << "전역 변수 x의 값: " << : :x << endl;' 라인은 전역 변수 'x'의 값을 출력합니다.
이 값은 '10'입니다. ': :' 스코프 결정 연산자를 사용하여 전역 변수 'x'를 지정하였습니다.
결과적으로, 위 코드는 다음 출력을 생성합니다:
지역 변수 x의 값: 5
전역 변수 x의 값: 10
즉, 전역 변수 'x'와 지역 변수 'x'는 이름이 같지만 서로 다른 변수입니다.
': :' 스코프 결정 연산자를 사용하여 전역 변수와 지역 변수를 구별할 수 있습니다.
멤버 포인터 연산자(pointer-to-member operator)
#include <isotream>
using namespace std;
class MyClass {
public:
int x;
void myFunction(int y) {
cout << "x = " << x << ", y = " << y << endl;
}
};
int main() {
MyClass obj;
obj.x = 10;
void (MyClass: : *ptr)(int) = &MyClass: :myFunction;
(obj.*ptr)(20);
return 0;
}
이 예제 코드는 클래스 멤버 함수의 포인터를 사용하여 클래스의 인스턴스에서 함수를 호출하는 방법을 보여줍니다.
위 코드에서 'MyClass' 클래스는 'int x' 데이터 멤버와 'void myFunction(int y)' 멤버 함수를 가집니다.
'main()' 함수에서 'MyClass'의 인스턴스 'obj'를 만들고 'obj.x = 10;'으로 'x' 값을 할당합니다.
'void (MyClass: :*ptr)(int) = &MyClass: :myFunction; ' 라인에서,
'MyClass'의 멤버 함수 포인터 'ptr'을 선언하고 'MyClass: :myFunction'의 주소를 할당합니다.
'(obj.*ptr)(20); '라인은 'obj'의 멤버 함수 'myFunction'을 호출합니다.
포인터 연산자 '.*'는 'obj'의 멤버 함수를 호출할 수 있도록 합니다.
이 호출은 'obj.x'와 '20'을 인자로 하여 'myFunction'을 호출하고 그 결과를 출력합니다.
결과적으로, 위 코드는 다음 출력을 생성합니다:
x = 10, y = 20
즉, 클래스 멤버 함수의 포인터를 사용하여 클래스의 인스턴스에서 함수를 호출할 수 있습니다.
포인터 연산자 '.*'를 사용하여 인스턴스의 멤버 함수를 호출할 수 있습니다.
어떠셨나요?
C++ 범위지정 연산자와 멤버 포인터 연산자에 대해 설명드렸는데요.
복잡해보일 순 있어도 하나하나 천천히 따라하시다 보면 금방 이해되실 거에요.
그럼 저는 다음 시간에 또 유익한 정보로 돌아오겠습니다!