Coding/C & C++

C/C++ 구조체(struct, class)

heyoon2j 2020. 2. 18. 17:47

 C/C++ 구조체(struct, class)

ㆍ C와 C++ 비교

- 클래스와 객체의 차이는 구조체를 위한 함수들이 클래스의 경우 "종속성"을 띠지만, 객체의 경우 "전역함수"의 형태를 띠기 때문에 "종속성"을 나타내지 못하고 다른 영역에서 해당 함수를 호출하는 실수를 범할 수 있다.

* C++에서는 객체 안에 함수를 넣을 수 있다.

 

1. C 언어(struct)

ex>

#define ID_LEN 20
#define MAX_SPEED 200
#define FUEL_STEP 2
#define ACC_STEP 10
#define BRK_STEP 10

 

typedef struct Car
{
     char gamerID[ID_LEN];
     int fuelGauge;
     int curSpeed;
} Car;

void ShowCarState(const Car &car)
{
     ...
}

void Accel(Car &car)
{
     ...
}

 

2. C++(class)

ex>

namespace CAR_CONST

{

     enum
     {
          ID_LEN=20,
          MAX_SPD=200,
          FUEL_STEP=2,
          ACC_STEP=10,
          BRK_STEP=10
     };

}

 

class Car
{
private:
     char gamerID[Car_CONST::ID_LEN];
     int fuelGauge;
     int curSpeed;

public:
     void InitMembers(char* ID, int fuel);
     void ShowCarState(cont Car &car);
     void Accel();
};

void Car::InitMembers(char* ID, int fuel)
{
     ...
}

void Car::ShowCarState()
{
     ...
}

void Car::Accel()
{
     ...
}

 

ㆍ 접근제어 지시자(C++)

- public: 어디서든 접근 허용

- protected: 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용

- private: 클래스 내에서만 접근 허용

* 기본적으로 class의 경우 private로, struct의 경우 public으로 선언된다.

 

 

ㆍ 클래스 디자인 (C++)

1. 정보 은닉

- 객체의 멤버변수에 접근을 제한하도록 유도하는 것(오직 멤버함수를 통해 접근하도록 유도)

- 접근제어 지시자 Private 사용

- 일반적으로 "GetXXX", "SetXXX"로 함수 이름을 정의하고, 이를 이용하여 변수에 접근

* 추가적으로 멤버변수를 변경하지 않는 멤버함수에는 const를 추가하여 안정성을 높일 수 있다.

* const 함수 내에서는 const가 아닌 함수의 호출이 제한된다.

=> ex> int GetX() const;, 이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다는 의미

 

 

2. 캡슐화

- 관련 있는 함수와 변수를 하나의 클래스 안에 묶는 것

- 구현하는 프로그램의 성격과 특성에 따라서 적용하는 범위가 달라지기 때문에, 범위를 결정하기 쉽지 않다!!!

- 보통 얘기할 때, 캡슐화는 기본적으로 정보 은닉을 포함하는 개념이라고 이야기한다.

 

 

 

'Coding > C & C++' 카테고리의 다른 글

C++ 생성자, 소멸  (0) 2020.02.21
C/C++ 파일 분할과 헤더 파일의 디자인  (0) 2020.02.18
C/C++ 함수 오버로딩 vs 함수 오버라이딩  (0) 2020.01.31
C/C++ 배열과 포인터  (0) 2020.01.11
C/C++ 입출력  (0) 2020.01.04