IT 프로그래밍/C++

[4.8 ~ 5.0]영역 제한 열거형(열거형 클래스) ,자료형에게 가명 붙여주기, 구조체

기술1 2024. 3. 22. 20:58
#include <iostream>


int main()
{
	using namespace std;

	enum class Color
	{
		RED,
		BLUE
	};

	enum class Fruit
	{
		BANANA,
		APPLE,
	};

	Color color = Color::RED;
	Fruit fruit = Fruit::BANANA;

	if (color == fruit)
	{
		cout < "Color is fruit?" << endl;
	}
}

이렇게 class를 사용해주면 비교가 안되게 막아줍니다. 물론 if(color == fruit)도 (static_cast<int>(color)) 이런식으로 강제로 변환해서 할 수도 있지만 이렇게 강제로 캐스팅을 할 수도 있지만 실전 프로그래밍을 하실 때 문제가 될 일을 만들어서 할 일은 없겠죠?

 

 

 

typedef double distance_t;

'

내가 distance_t를 쓸 때는 double 데이터 타입에 새로운 이름을 붙여준 것입니다. 

\

int main()
{
	typedef double distance_t;

	double		my_distance;
	distance_t	home2work;

	return 0; 
}

이렇게 할 경우 둘 다 double로 받아들입니다. 이렇게 typedef는 double이라는 것에 새로운 이름을 써준 것입니다. 이는 오로지 사용자의 편의를 위한 것입니다. 

 

만약 distance를 표현할 때 double 말고 float를 쓰고 싶을 때가 있겠죠? 거기에서 바꿔주는 것을 어떻게 해야할지 고민한다면 typedef double을 typedef float만 바꿔주면 되기에 코드를 유지 관리하기 쉬워서 이 함수를 쓰는 것입니다. 

 

	vector<pair<string, int>> pairlist;

string과 int가 복잡한 자료형이 존재할 수 있다고 생각하시면 됩니다. pairlist1이 있고 pairlist2가 있다면 매번 이걸 타이핑하지는 않겠지만 보기에는 불편합니다. 

 

그래서 얘도 이름을 붙여주면서 이를 간소화할 수 있는 것입니다. 

 


 

다양한 것을 하나의 변수로 설명하고자 할 때 구조체를 사용해주시면 됩니다. 하나의 사용자정의 자료형인 것처럼 사용하자는 것입니다. 

 

이 구조체는 C언어 자체로 중요한테 C++에서는 CLASS를 이해하기 위한 중요한 요소를 다 포함하고 있습니다. 

 

struct Person
{
	double	 height1;
	float	weight;
	int		age;
	string name;
};

int main()
{
	Person me{2.0, 100.0, 20, "Jack jACK"};
	Person mon;
	Person dad;

	return 0; 
}

구조체는 이런식으로 만들어줄 수 있습니다. 훨씬 더 간편하게 사용할 수 있겠죠?