본문 바로가기

C++/C++ 문법

[C++] 구조체

728x90
반응형

typedef 선언 생략

 

C++에서의 구조체는 C표준에서의 구조체와 약간 차이가 있다.

C표준에서는 구조체 변수를 선언할 때 struct 키워드를 생략하기 위해서 typedef 선언을 추가해야만 했다.

 

그러나 C++에서는 별도의 typedef 선언 없이도 아래 코드처럼 struct 키워드를 생략하는 것이 가능하다.

struct Pos {
	double posx;
	double posy;
};

int main ()
{
	Pos posA;
	return 0;
}

 

 

 

 

 

 

 





 

구조체 안에 함수 삽입

 

또한 C++에서는 구조체 안에서 함수를 선언할 수도 있다.


함수에 접근할 때에는 구조체 변수에 접근하는 것과 마찬가지로 도트연산자를 통해서 접근할 수 있다.
따라서 아래 코드처럼 사용하는 것이 가능하다.

#include <iostream>

struct Pos {
	double posx;
	double posy;

	void ShowCurPos() {
		std::cout << "현재 좌표의 x값 : " << posx << std::endl;
		std::cout << "현재 좌표의 y값 : " << posy << std::endl;
	}
};

int main()
{
	Pos posA = {5, 10};
	posA.ShowCurPos();
	return 0;
}

 



위 코드처럼 구조체 안에 함수를 넣게 되면 따로 매개변수를 전달할 필요가 줄게 되며

구조체 밖에서 함수가 사용되는 것을 막을 수 있다.

또한 구조체 안에 함수를 정의하게 되면 inline 지시자를 사용하지 않더라도 인라인함수로 처리된다.

 

 

 

 

 

 

 

 

 



구조체 안에 enum 상수 선언

 

상수도 함수처럼 해당 구조체에서만 유효한 상수를 선언할 때에

다른 영역에서 사용하는 것을 막기 위하여 구조체 내부에 선언할 수 있다.

 


따라서 아래 코드와 같이 선언된 상수들을

 

#define Max_XPos 200
#define Max_YPos 200
#define Min_XPos -200
#define Min_YPos 0



아래 코드처럼 enum 선언을 통해서 구조체 내부에 정의할 수 있다.

struct Pos {
    double posx;
    double posy;
    enum {
        Max_XPos  = 200,
        Max_YPos = 200,
        Min_XPos = -200,
        Min_YPos = 0
        };
};



 

 

 

 

 

 

 

 

 

 

구조체 내에서 함수의 선언과 정의 분리

 

구조체 내에 선언된 함수의 정의를 외부로 분리하는 것도 가능하다.

 

struct Pos {
	double posx;
	double posy;
	void ShowCurPos();
};

void Pos::ShowCurPos(){
	std::cout << "현재 좌표의 x값 : " << posx << std::endl;
	std::cout << "현재 좌표의 y값 : " << posy << std::endl;
}

 

 

아까 구조체 안에 함수를 정의하면 inline 선언이 내포된다고 하였는데 이렇게 정의를 분리하였을 경우에는

inline 선언이 사라지게 된다.

 

 

 

728x90
반응형