09. C++ 구조체의 기본과 활용
- C++ 구조체: 기본과 활용
- C++의 구조체(struct)는 여러 데이터를 하나의 단위로 묶어주는 사용자 정의 데이터 타입입니다.
- 구조체는 연관된 데이터를 하나의 그룹으로 관리할 수 있도록 도와줍니다.
- 구조체의 기본 개념
struct 구조체명 {
데이터타입 변수명1; 데이터타입 변수명2; // 추가 멤버 변수
};
struct Student {
std::string name; int age; double grade;
};
위 코드에서 Student라는 구조체는 학생의 이름, 나이, 성적을 저장하는 세 개의 멤버 변수를 포함하고 있습니다.
- 구조체 변수 선언과 초기화
- 구조체를 정의한 후에는 구조체 변수를 선언하고 초기화할 수 있습니다.
- 다음은 Student 구조체 변수를 선언하고 초기화하는 예제입니다:
Student student1 = {"Alice", 20, 3.8};
- 구조체 변수를 초기화할 때는 중괄호 {}를 사용하여 멤버 변수를 순서대로 지정합니다.
- 구조체 멤버에 접근
구조체 변수의 멤버에 접근하려면 도트 연산자(.)를 사용합니다. 예를 들어, student1 변수의 이름과 성적을 출력하려면 다음과 같이 할 수 있습니다:
std::cout << "Name: " << student1.name << std::endl;
std::cout << "Grade: " << student1.grade << std::endl;
- 구조체 배열
- 구조체 배열을 사용하면 여러 개의 구조체 변수를 하나의 배열로 관리할 수 있습니다.
- 예를 들어, 여러 학생의 정보를 저장하는 배열을 선언하려면 다음과 같이 합니다:
Student students[3] = { {"Alice", 20, 3.8}, {"Bob", 22, 3.6}, {"Charlie", 21, 3.9} };
// 배열 요소에 접근하려면 인덱스를 사용하여 접근할 수 있습니다:
std::cout << "First student's name: " << students[0].name << std::endl;
- 구조체와 함수
- 구조체를 함수의 인수로 전달하거나 함수에서 반환할 수 있습니다. 다음은 구조체를 인수로 받는 함수의 예제입니다:
void printStudentInfo(const Student& student) {
std::cout << "Name: " << student.name << std::endl;
std::cout << "Age: " << student.age << std::endl;
std::cout << "Grade: " << student.grade << std::endl;
}
- 이 함수는 Student 구조체 변수를 인수로 받아 학생의 정보를 출력합니다.- 중첩된 구조체
- 구조체는 다른 구조체를 멤버로 가질 수 있습니다.
- 예를 들어, 이름을 저장하는 구조체와 친구 정보를 저장하는 구조체를 정의해 보겠습니다:
struct Name {
std::string first; std::string last;
};
struct Friends {
Name fullName; std::string address; std::string job;
};
이 예제에서 Friends 구조체는 Name 구조체를 멤버 변수로 포함하고 있습니다.
- 구조체의 활용: 함수와 구조체
- 구조체는 함수의 인수로 전달하거나 함수의 반환값으로 사용할 수 있습니다.
- 다음 예제는 구조체를 인수로 전달하는 방식과 반환값으로 사용하는 방식을 보여줍니다:
struct Prop {
int savings; int loan;
};
int CalcProperty(const Prop& property) {
return property.savings - property.loan;
}
Prop InitProperty() {
return {10000000, 4000000};
}
int main() {
Prop hong = InitProperty();
int hong_prop = CalcProperty(hong);
std::cout << "홍길동의 재산: " << hong_prop << "원" << std::endl;
return 0;
}
위의 예제에서 CalcProperty 함수는 Prop 구조체를 인수로 받아 재산을 계산하며, InitProperty 함수는 Prop 구조체를 반환합니다.