본문으로 바로가기

[C++]C++의 구조체와 Class

category 프로그래밍/C++ 2017. 4. 20. 01:01
728x90
반응형

안녕하세요. letitkang입니다.


포스팅 시작할게요. '윤성우의  C++ 열혈강의'를 보고 있습니다.


 

 

 



1. 구조체 struct


구조체는 연관있는 데이터를 하나로 묶기 위해서 사용하는 것이다.


구조체는 다들 알고 있을거라 생각합니다!


간단하게 복습해보겠습니다.


자동차 게임을 예로 들면 게임의 ID, 자동차의 연료량, 자동차의 속도를 구조체로 만들어보겟습니다.



// 구조체 정의

struct Car {

char id[50];

int fuel;

int speed;

};


// 구조체 선언

struct Car car;



위와 같이 사용합니다. 구조체에 대해 잘 모르시면, C책으로 구조체 부분을 한번 정독하시기 바랍니다.


 

 

 



2. C++의 구조체


C++에서는 어떻게 사용할까요?


C와 비슷하지만, 선언하는 부분에서 다릅니다. C에서는 struct를 생략하려면 typedef를 사용해야됩니다.


그러나 C++에서는 struct를 사용하지않고 선언이 가능합니다.



Car Car1;

Car Car2;



C++에서의 구조체는 더욱 편리합니다.


2. 구조체 안에 함수를 넣기(?)


결론적으로 말씀 드리면, C++에서는 구조체 안에 함수를 삽입할 수 있습니다.


아래와 같이 말이죠.



// 구조체 정의

struct Car {


enum

{

STATE = 1,

BREAK = 2

};


char id[50];

int fuel;

int speed;


void carstate()

{

cout<<"ID : "<id<<endl;

cout<<"fuel : "<<fuel<<endl;

cout<<"speed : "<<speed<<endl;

return;

};


void break()

{

speed = 0;

return;

}


// 함수 선언 후, 외부에서 함수 정의

void accel();

};


// 외부에서 선언한 구조체의 함수

void Car:accel()

{

speed = speed+10;

return;

}


// 구조체 선언

Car car = {"abc", 50, 20};

// 함수 호출.

car.carstate();

car.break();

car.accel();



구조체 안에 함수를 넣을 수 있고, 선언할 때 변수를 초기화할 수 있으며, 함수 호출은 구조체의 변수에 접근할 때와 같이 하면됩니다.


구조체 안에서 함수 선언을 하고, 정의는 구조체 외부에서도 할 수 있습니다.


또한 위의 예제처럼 구조체안에 함수 뿐만 아니라 enum도 넣을 수 있습니다.



3. Class란?


드디어 C++에서 젱리 중요하다고 생각하는 class라는 용어가 등장합니다.


구조체는 class의 일종이라고 보시면됩니다.


객체 지향의 존재 이유입니다!


먼저 클래스와 구조체의 차이점에 대해 살펴보겠습니다.


키워드 struct 대신 class를 사용하면 클래스가 됩니다.


아래는 class의 정의입니다.



// class 정의

class Car {

char id[50];

int fuel;

int speed;

};


// classs 선언

Car car1;                              // (O)

Car car2 = {"abc", 50, 0};    // (X)



물론 함수도 넣을 수 있습니다.


struct와 다른 점은, 선언과 동시에 초기화가 불가능하다는 것입니다.


이유가 뭐냐면 class의 변수에는 접근 권한이 있습니다.


default 값으로 외부에서 접근이 불가능 하기 때문에, 클래스 내에서만 접근할 수 있습니다.


밑에서 class 변수의 접근자에 대해 알아보겠습니다.



public        어디서든 접근 가능

protected   상속관계와 유도 클래스에서 접근 가능 

private       클래스 내에서만(클래스 내의 함수) 접근 가능. 


 

 



오늘의 포스팅은 여기 까지입니다.


class는 진짜 중요합니다!


객체 지향의 꽃이라고 해도 과언이 아닙니다.


다음 포스팅 부터 더 자세히 알아보겠습니다.


읽어주셔서 감사합니다!

728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

[C++] STL이란  (0) 2021.06.02
[C++]C++의 용어 정의와 파일 분할  (0) 2017.06.16
[C++]new 와 delete, 그리고 C++의 헤더파일  (0) 2017.04.17
[C++]참조자(reference) 3  (0) 2017.04.11
[C++]참조자(reference) 2  (0) 2017.04.09