구조체 : 연관 있는 데이터를 묶을 수 있는 문법적 장치
1.C++에서의 구조체 변수의 선언
C언어에서 구조체 변수를 선언하는 방법
struct Car basicCar;
struct를 생략하기 위해서는 별도의 typedef 선언을 추가해야 함
but C++에서는?
struct 안써도 돼!
Car basicCar;
2.구조체 안에 함수 삽입하기
기존의 문제) Car에 종속적인 함수들을 구조체 밖에다가 쓰면 전역함수의 형태를 띄기 때문에 Car에 종속적임을 나타나지 못함.
따라서 다른 영역에서 이 함수를 호출하는 실수를 범할 수도 있음
C++에서는 구조체 안에 함수를 삽입하는 것을 허용함
//1.기존 형태
struct Car
{
...
}
void Accel(Car &car)
{
...
}
//2.함수를 구조체에 삽입
struct Car
{
void Accel()
{
...
}
}
1)매개변수를 통해서 연산의 대상정보를 전달받음
함수 내에서도 참조자 car을 대상으로 연산(출력을 진행)
2) 매개변수, 참조자 car같은 정보가 존재하지 않음
3.구조체 안에 enum 상수의 선언
기존 #define ID_LEN 20 같은 매크로 상수
구조체 Car에만 의미가 있고 다른 영역에서 사용하도록 정의된 상수가 아님.
구조체 내에 포함시키는 것이 좋을 수 있음
이럴 때 사용하는 것이 enum
enum 선언을 구조체 내부에 삽입하는 것이 부담스럽다면 이름공간을 이용해서 상수가 사용되는 영역을 명시하는 것도 방법.
장점: 몇몇 구조체들 사이에서만 사용하는 상수들 선언 시 도움이 되며, 가독성이 좋아짐.
like this
namespace CAR_CONST
{
enum
{
ID_LEN = 20,
}
}
struct Car
{
char gamerID[CAR_CONST::ID_LEN];
}
4.함수는 외부로 뺄 수 있다.
구조체를 보자마자 선언되어 있는 변수정보, 정의되어 있는 함수정보가 쉽게 들어와야 코드의 분석이 용이.
함수의 수가 많거나 길이가 길다면 구조체 밖으로 함수를 빼낼 필요가 있음.
함수 원형을 구조체 안에 두고, 함수의 정의를 구조체 밖으로 빼내는 것.
struct Car
{
char gamerID[CAR_COSNT::ID_LEN];
int fuelGauge;
int curSpeed;
void ShowCarState();
void Accel();
void Break();
}
void Car::ShowCarState()
{
...
}
void Car::Accel()
{
...
}
void Car::Break()
{
...
}
int main(void)
{
Car run99={"run99", 100, 0};
run99.Accel();
run99.ShowCarState();
return 0;
}
'LANG > C++' 카테고리의 다른 글
[C++]03-3.객체지향 프로그래밍의 이해 (0) | 2023.05.12 |
---|---|
[C++]03-2.클래스(Class)와 객체(Object) (0) | 2023.05.12 |
[C++]02-6.C++에서 C언어의 표준함수 호출하기 (0) | 2023.05.11 |
[C++]02-5.malloc & free를 대신하는 new &delete (0) | 2023.05.11 |
[C++]02-4.참조자(Reference)와 함수 (0) | 2023.05.11 |