SW/C++

C++11 : 구조체에 대해 알아볼까요? (개념 및 예제)

얇은생각 2019. 1. 3. 07:30
반응형

이번 포스팅에서는 C에서의 구조체를 이해하시고 있다는 가정하에 C++ 구조체에 대해 말씀드리겠습니다. 하지만 처음 보신다 해도 잘 이해하실 수 있을 것입니다.

 

#include <iostream>
using namespace std;
 
#define NAME_LEN 20
#define SEX_LEN 10
#define JOB_LEN 20
#define CHARACTER_LEN 20
 
struct Chulsoo
{
    char name[NAME_LEN];
    char sex[SEX_LEN];
    char job[JOB_LEN];
    char character[CHARACTER_LEN];
    int age;
    bool marriageStatus;
 
    void introduce()
    {
        cout << "이름: " << name << endl;
        cout << "성별: " << sex << endl;
        cout << "직업: " << job << endl;
        cout << "성격: " << character << endl;
        cout << "나이: " << age << endl;
        cout << "결혼여부: " << (marriageStatus ? "YES" : "NO"<< endl;
    }
 
    void eat(char * food)
    {
        cout << "철수는 " << food << "를 먹는다" << endl;
    }
 
    void sleep()
    {
        cout << "철수는 잔다" << endl;
    }
 
    void drive(char * destination)
    {
        cout << "철수는 " << destination << "으로 운전한다" << endl;
    }
 
    void write()
    {
        cout << "철수는 책을 쓴다" << endl;
    }
 
    void read()
    {
        cout << "철수는 책을 읽는다" << endl;
    }
};
 
struct Younghee
{
    char name[NAME_LEN];
    char sex[SEX_LEN];
    char job[JOB_LEN];
    char character[CHARACTER_LEN];
    int age;
    bool marriageStatus;
 
    void introduce()
    {
        cout << "이름: " << name << endl;
        cout << "성별: " << sex << endl;
        cout << "직업: " << job << endl;
        cout << "성격: " << character << endl;
        cout << "나이: " << age << endl;
        cout << "결혼여부: " << (marriageStatus ? "YES" : "NO"<< endl;
    }
 
    void eat(char * food)
    {
        cout << "영희는 " << food << "를 먹는다" << endl;
    }
 
    void sleep()
    {
        cout << "영희는 잔다" << endl;
    }
 
    void shopping()
    {
        cout << "영희는 쇼핑을 한다" << endl;
    }
};
 
int main(void)
{
    Chulsoo chulsoo = { "철수""남성""작가""diligent"32true };
    Younghee younghee = { "영희""여성""주부""impatient"32true };
    chulsoo.drive("레스토랑");
    chulsoo.eat("스테이크");
    younghee.eat("스테이크");
    chulsoo.drive("집");
    younghee.sleep();
    chulsoo.write();
    chulsoo.read();
    chulsoo.sleep();
    cout << endl;
    chulsoo.introduce();
    cout << endl;
    younghee.introduce();
    return 0;
}
cs


철수와 영희의 속성과 기능 struct 키워드를 사용하여 구조체로 표현하였습니다. C의 구조체만 공부하셨다면 예제가 동작하는 것을 보고 놀랄 수 있습니다. 왜냐하면 C와 C++ 구조체가 다르기 때문입니다. 


먼저 C와 C++에서 구조체 변수를 선언하는 방식이 다릅니다.


struct Chulsoo chulsoo : C 방식

Chulsoo chulsoo : C++ 방식


물론 C++에서 C 방식을 사용해도 잘 동작합니다. 하지만 C++ 방식이 더 간단하죠?


또 C++ 구조체에서는 구조체 안에서 함수를 선언하고 정의할 수 있습니다. 이처럼 구조체에 속한 함수를 해당 구조체의 멤버 함수라고 합니다. 또 구조체에 속한 변수를 멤버 변수라고 합니다.


이렇게 선언하고 정의한 구조체의 멤버 함수를 호출하는 방식은 C에서 구조체의 멤버 변수에 접근하는 방식과 유사합니다. 구조체 변수와 해당 구조체의 멤버 함수 사이에 멤버 접근 연산자(.)를 사용합니다.


구조체 변수.구조체 멤버 함수


C++ 구조체에 대한 감이 잡히시나요?  구조체 변수 선언 방식이나 구조체 안에서도 멤버 함수를 선언하고 정의할 수 있는 등 전체적으로 기능들이 개선된 느낌을 받을 것입니다. 다음 포스팅에서는 C++ 클래스와 객체에 대해 알아보겠습니다.

반응형