구조체란?
여러 개의 변수와 함수를 하나의 단위로 묶은 것
구조체란 데이터의 집합을 정의하는 사용자 정의 자료형이다. 여러개의 변수를 하나의 단위로 묶어서 다루게한다. 각각의 변수와 함수를 구조체의 멤버라고 한다. 클래스와 달리 구조체의 멤버는 public 접근제어를 기본으로 가진다.
struct MyStruct {
int first;
int second;
int Sum() { return first + second; }
};
구조체를 선언 시 마지막에 세미콜론을 붙이는 것을 기억하자.
멤버
구조체의 멤버란 구조체 내에 정의 된 변수나 함수다. 구조체는 멤버를 여러 개 가질 수 있다. 구조체 멤버 변수는 구조체의 인스턴스가 다룰 값을 저장한다. 구조체 멤버함수는 구조체의 데이터를 처리하거나 특정 작업을 실행한다.
struct Person {
/* 멤버변수 */
std::string name;
int age;
float height;
/* 멤버함수 */
void introduce() {
std::cout << "Name: " << name << ", Age: " << age << ", Height: " << height << std::endl;
}
};
구조체 접근
구조체의 인스턴스에 접근연산자(`.`)를 통해 멤버에 접근할 수 있다.
Person person; // 구조체 인스턴스 선언
/* 접근연산자(.)를 통한 인스턴스의 멤버에 접근 */
person.name = "Alice";
person.age = 30;
person.height = 165.5;
person.introduce(); // 멤버 함수 호출
멤버연산자
/* 구조체 인스턴스를 변수에 저장 */
MyStruct a;
a.first = 123;
a.second = 456;
cout << sizeof(a) << endl; // 8
/* 구조체 인스턴스의 주소를 포인터에 저장 */
MyStruct *ptr_a = &a;
cout << ptr_a->first << " " << ptr_a->second << " " << ptr_a->Sum() << endl;
- 구조체가 자료형인 변수인 경우: 점연산자(.)
- 구조체 자료형의 포인터 변수인 경우: 화살표 연산자(→)
구조체를 원소로 하는 배열
// 구조체와 배열
MyStruct pairs[10];
for (int i = 0; i < 10; i++) {
pairs[i].first = 10 * i;
pairs[i].second = i;
}
for (int i = 0; i < 10; i++) {
cout << pairs[i].Sum() << " " << endl;
}
구조체를 원소로 하는 배열은 배열의 특성상 내부적으로 포인터다. 하지만 인덱싱을 통해 각각의 구조체 인스턴스에 접근할 때 인스턴스의 멤버에 접근하려면 화살표 대신에 점(.)으로 멤버에 접근한다.