예를 들어서, 각각의 차의 속도와 방향 그리고 연료량을 하나의 구조체로 묶었다고 가정해보자. 여기에 해당되는 데이터의 처리를 담당하는 함수가 있을 것이다.
함수를 전역에 선언하게 될 경우, 이 함수들이 구조체에 종속적인 함수라는 것을 알 방법이 없어 엉뚱한 곳에서 해당 함수들을 호출할 수도 있다. 이런 애로사항을 해결하기 위해 C++에서는 구조체 안에 함수를 삽입하는 것을 허용하고 있다.
구조체 안에 삽입된 함수들은 구조체에 있는 변수들에 직접 접근이 가능해진다.
하지만, 구조체 내에 정의된 함수가 많거나 길이가 길면 아래와 같이 함수의 원형 선언은 구조체 안에 두고, 함수의 정의만 구조체 밖으로 빼내는 방식으로 함수를 구조체 밖으로 빼낼 수 있다.
struct Car{
...
void ShowCarState();
void Accel();
...
};
void Car::ShowCarState(){
...
}
void Car:: Accel(){
...
}
구조체 안의 데이터들에게만 의미있는 매크로 상수가 있을 경우, 열거형 enum
을 이용해서 구조체 내에서 상수를 정의할 수 있다.
또는, namespace
를 활용해서 상수가 사용되는 영역을 명시할 수도 있다. 이 방법을 사용할 경우, 몇몇 구조체에서 사용되는 상수를 선언할 때 도움이 되고 가독성이 좋아진다.
<출처 : 윤성우의 열혈 C++ 프로그래밍>
위 책을 공부하며 정리한 내용입니다.