C++ Chapter 4.8 : 구조체

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


구조체 생성 및 멤버들 초기화

  • 정의할땐 끝에 ; 꼭 붙이기
  • 중괄호 사용 { }
    • Person me{175.0, 65.0f, 20, “Jack”} ;
      struct Person{
      	double height;
      	float weight
      	int age;
      	string name;
      }**;**
    
      int main()
      {
      	/* Person 구조체타입의 me, mom, dad 생성*/
      	Person mom;
      	Person dad;
        	
      	/* 일일이 초기화*/
      	me.age = 20;
      	me.name = "Jack";
      	me.height = 175.0;
      	me.weight = 65.0f;
    
      	/* 생성과 동시에 초기화도 한번에*/
      	Person me{175.0, 65.0f, 20, "Jack"};
      }
    
  • 초기화값이 기본값보다 우선순위가 높다.
    • 초기화 안하면 기본값으로 들어가게 된다.
    • Person me{175.0, 65.0f, 20, "Jack"};
      • me는 이렇게 초기화 된다.
    • Person mom;
      • 초기화를 안해주었으니 기본값대로 설정된다.
      struct Person{
      	double height = 170.0; // 기본값
      	float weight = 100.0f; // 기본값
      	int age; = 25; // 기본값
      	string name = "Mr. Incredible"; // 기본값
      }**;**
    
      int main()
      {
      	/* 일일이 초기화*/
      	me.age = 20;
      	me.name = "Jack";
      	me.height = 175.0;
      	me.weight = 65.0f;
    
      	/* Person 구조체타입의 me, mom, dad 생성*/
      	Person me{175.0, 65.0f, 20, "Jack"}; // me는 이렇게 초기화 된다.
      	Person mom; // 기본값대로 변수값들이 설정된다.
      	Person dad; // 기본값대로 변수값들이 설정된다.
      }
    


구조체를 쓰는 이유

  1. 관련있는 여러가지 변수를 다 파라미터로 넘기기엔 복잡

    → 관련 있는 변수들을 구조체로 묶으면 구조체 이름만 넘기면 됨

     void printPerson(Person ps)
     {
     	cout << ps.height << " " << ps.weight << " " << ps.age << " " << ps.name;
     	cout << endl;
     }
    
     int main()
     {
     	Person me{175.0, 65.0f, 20, "Jack"};
     	printPerson(me);
     }
    
    • 구조체 이름 넘길 필요도 없이 함수를 구조체 안에 정의하면 매개변수 없이도 쓸 수 있다.
      • 함수를 구조체 안에서 정의하면 그냥 바로 멤버변수 갖다 쓸 수 있다.
        • ps.name 이라고 쓸 필요 없이 그냥 name
      • me.print(); 로만 사용하면 끝.
        struct Person
        **{**
        	double height;
        	float weight
        	int age;
        	string name;
      
        	void print()
        	{
        		cout << height << " " << weight << " " << age << " " << name;
        		cout << endl;
        	}
        };
      
        int main()
        {
        	Person me{175.0, 65.0f, 20, "Jack"};
        	me.print();
        }
      
  2. 키, 몸무게, 나이 사람마다 각각 3개씩 변수 또 만들기에는 너무 부담된다.

    → 키, 몸무게, 나이를 한 구조체로 묶으면 됨

     struct Person{
     	double height;
     	float weight
     	int age;
     	string name;
     };
    
  3. 다양한 자료형을 묶어 마치 하나의 자료형인 것처럼 사용할 수 있게 된다.


구조체 멤버들 복사

Person Jack{175.0, 65.0f, 20, "Jack"};

Person Suzan(Jack);
Person Leo = Jack;
  • Suzan 도, Leo도, 둘 다 Jack의 멤버 값들이 각각의 멤버값들로 복사가 된다.
    • 단, 멤버중에 string 같이 객체가 있으면 복사가 제대로 안될 수 있다.


구조체 멤버들의 크기 : 패딩 padding

image

struct Employee
{
	shor id;
	int age;
	double wage;
}**;**

int main()
{
	Employee emp1;

	cout << sizeof(Employee) << endl; // 14가 아닌 16이 나온다.
}
  • 4byte 단위로 딱 맞추기 위해서 short int 부분에 빈 공간 2byte를 패딩으로 집어넣음
  • 이렇게 Employee 구조체의 크기는 14가 아닌 16이 된다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기