C & C++/윤성우의 열혈 C++ 프로그래밍
[열혈 C++] 구조체와 클래스
거북이 코딩
2024. 2. 4. 15:43
C++에서의 구조체 정의 방법
C++에서는 typedef 선언의 필요 없이 간단하게 구조체를 정의하고 선언할 수 있습니다. Car라는 구조체를 정의하기 위해서 struct Car { 데이터 }; 의 형태로 정의를 하고 선언할 때 struct 없이 Car car; 형태로 선언하면 됩니다. 또한 C++에서는 구조체 관련 함수를 구조체 안에 삽입할 수 있습니다. 구조체 안에 함수를 삽입하게 되면 함수가 무엇과 관련한 함수인지 파악하기 용이하고 구조체 안에 들어간 함수는 자동으로 inline처리가 됩니다. 간단한 예제를 작성해 보겠습니다.
#include <iostream>
using namespace std;
struct Car {
int carspeed;
void Accel() {
carspeed += 10;
cout << "부릉부릉~" << endl;
}
};
int main(void) {
Car car;
car.carspeed = 0;
car.Accel();
cout << "속도: " << car.carspeed << endl;
return 0;
}
간단하게 정의한 Car 구조체와 관련된 Accel() 함수를 구조체 안에 넣었습니다. 만약 구조체 내부의 함수가 길어 내용파악에 방해가 된다면 함수의 정의 부분은 밖으로 빼낼 수 있습니다. 하지만 함수의 정의부분을 밖으로 빼주게 되면 inline의 의미가 사라지기 때문에 inline함수로 정의하길 원한다면 명시해줘야 합니다.
#include <iostream>
using namespace std;
struct Car {
int carspeed;
void Accel();
};
void Car::Accel() {
carspeed += 10;
cout << "부릉부릉~" << endl;
}
int main(void) {
Car car;
car.carspeed = 0;
car.Accel();
cout << "속도: " << car.carspeed << endl;
return 0;
}
클래스
구조체를 정의할 때 struct 대신에 class를 써주면 클래스가 된다. 구조체와 클래스의 유일한 차이점은 구조체와 달리 클래스에서는 명시하지 않은 데이터는 private 으로 처리한다는 점이다. 따라서 클래스의 데이터를 외부에서 접근하려면 따로 public처리를 해주어야 한다.
- public 어디서든 접근허용
- private 클래스 내부에서만 접근가능 (또는 클래스 내부에 정의된 함수를 통해서)