구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치
C++에서는 typedef을 선언하지 않아도 구조체를 선언하고 나서 변수를 선언할 수 있음
EX)struct Car basicCar; -> Car basicCar;
원래라면 typedef struct Car {...} Car;로 정의를 해주어야
변수선언 시 Car basicCar로 바로 사용할 수 있지만 C++에선
상관 없다는 이야기
C++에서는 구조체 안에 함수를 삽입하는 것을 허용하므로 다음과 같이 정의할 수 있음
struct Car
{
char gamerID[ID_LEN];
int fuelGauge;
int curSpeed;
void ShowCarState(){...};
void Accel(){...};
}
함수가 구조체 내에 삽입되면서 구조체 내에 선언된 변수에 직접접근이 가능해짐!
namespace CAR_CONST
{
enum
{
ID_LEN = 20,
MAX_SPD = 200,
FUEL_STEP = 2,
ACC_STEP = 10,
BRK_STEP = 10
}
}
다음과 같이 이름공간안에 열거형을 선언해두고 필요한 구조체 안에서 CAR_CONST::ID_LEN과 같이 사용을 하면 어느 영역에서 사용되는 상수 인지 쉽게 알 수 있어서 가독성이 좋아짐.
struct Car
{
...
void ShowCarState();
void Accel();
...
};
void Car::ShowCarState()
{
...
}
vpod Car::Accel()
{
...
}
이렇게 함수 선언과 정의를 구분하여 작성하는 것이 가독성에 도움이 됨.
inline void Car::ShowCarState() {...}
inline void Car::Accel() {...}
기존에 사용하던 struct를 대신해서 class를 사용하면 구조체가 아닌 클래스가 된다. 둘의 유일한 차이점은 class의 기본접근 제어자가 private이기 때문에 클래스 내에 선언된 함수에서만 접근이 가능함.
구조체 변수, 클래스 변수라는 표현을 사용하지 않는데 그 이유로 구조체와 클래스는 변수의 성격만 지니는 것이 아니기 때문에 변수라는 표현을 대신해서 객체(Object)라는 표현을 사용한다.
클래스를 구성하는 변수를 가리켜 '멤버변수'라고 하며 클래스를 구성하는 함수를 '멤버함수'라고 한다.
<Car.h>
class Car
{
private:
char gamerID[CAR_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
public:
void InitMembers(char * ID, int fuel);
void ShowCarState();
void Accel();
void Break();
};
<Car.cpp>
void Car::InitMembers(char * ID, int fuel) {...}
void Car::ShowCarState() {...};
void Car::Accel() {....};
void Car::Break() {...};
그 이유로 컴파일 과정에서 함수의 호출문이 있는 곳에 함수의 몸체 부분이 삽입되어야 하기 때문이다.
객체지향 프로그래밍은 현실에 존재하는 사물과 대상, 그리고 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍이다.
하나의 객체가 다른 하나의 객체에게 메시지를 전달하는 방법은 함수호출을 기반으로 하며 객체지향에서는 이러한 형태의 함수호출을 가리켜 '메시지 전달'이라고 함
int SaleApples(int money)
{
int num = money/APPLE_PRICE;
numOfApples -= num;
myMoney += money;
return num;
}
void BuyApples(FruitSeller &seller, int money)
{
numOfApples += seller.SalesApples(money); // 상호작용 하는 모습
myMmoey -= money;
}
위의 두 함수를 보면 과일을 사는 사람이 BuyApples이란는 함수를 호출해 다른 하나의 객체(Seller)에게 seller.SalesApples(money)를 실행함으로 써 메시지를 전달하고 있고, 서로 상호작용하는 모습을 볼 수 있음.