본문 바로가기
C & C++/윤성우의 열혈 C++ 프로그래밍

[열혈 C++] 구조체와 클래스

by 거북이 코딩 2024. 2. 4.

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 클래스 내부에서만 접근가능 (또는 클래스 내부에 정의된 함수를 통해서)