열혈 c++ 프로그래밍을 보고 요약정리합니다.
struct Car
{
enum
{
ID_LEN = 20,
MAX_SPD = 200,
FUEL_STEP = 2,
ACC_STEP = 10,
BRK_STEP = 10
};
char gamerID[ID_LEN];
int fuelGauge;
int curSpeed;
void ShowState() {
...
}
void Accel() {
...
}
void Break() {
...
}
};
#include <iostream>
using namespace std;
namespace CAR_CONST
{
enum
{
ID_LEN = 20,
MAX_SPD = 200,
FUEL_STEP = 2,
ACC_STEP = 10,
BRK_STEP = 10
};
}
struct Car
{
char gamerID[CAR_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
void ShowState() {
...
}
void Accel() {
...
}
void Break() {
...
}
};
함수가 포함되어 있는 c++ 의 구조체를 보는 순간, 쉽게 눈에 들어와야 코드의 분석이 용이하다.
프로그램을 분석할 때, 함수의 기능만 파악을 하지, 함수의 세부구현까지 신경을 쓰지 않는다. 따라서 구조체를 보는 순간, 정의되어 있는 함수의 종류와 기능이 한눈에 들어오게끔 코드를 작성하는 것이 좋다.
따라서 구조체 내에 정의된 함수의 수가 많거나 그 길이가 길다면, 함수의 정의를 구조체밖으로 빼내는 것이다.
이렇게 하면, 해당 함수가 어디에 정의되어 있는지에 대한 정보만 추가해주면 된다.
#include <iostream>
using namespace std;
namespace CAR_CONST
{
enum
{
ID_LEN = 20,
MAX_SPD = 200,
FUEL_STEP = 2,
ACC_STEP = 10,
BRK_STEP = 10
};
}
struct Car
{
char gamerID[CAR_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
void ShowState();
void Accel();
void Break();
};
void Car::ShowState() {
...
}
void Car::Accel() {
...
}
void Car::Break() {
...
}
구조체안에 함수가 정의되어 있으면, 함수를 인라인으로 처리하라는 의미가 더불어 내포된다.
그런데 예제와 같이 함수를 구조체밖으로 빼버리면 이러한 의미가 사라지므로 인라인의 의미를 그대로 유지하려면 inline을 이용해서 인라인 처리를 명시적으로 지시해야 한다.
inline void Car::ShowCarState() {…}
클래스도 있는데 구조체를 왜 사용하는걸까..? 굳이 둘다 존재하는 이유가 뭘까.. 구조체의 경우 아무 접근지정자를 지정하지 않아도 디폴트가 public 이라는 차이가 있는걸까?
클래스는 기본적으로(별도의 선언을 하지 않으면) 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근 가능하다.
c++의 접근제어자는 public, protected, private
구조체와 클래스의 차이는 구조체의 경우 기본 접근 지정자가 public, 클래스의 경우 private
객체는 하나 이상의 상태 정보와 하나 이상의 행동으로 구성
클래스 기반의 두 가지 객체생성 방법