c++/클래스의 기본

[C++] 구조체 사용

TIM_0529 2022. 12. 30. 03:09
반응형

구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치.

이 전에 BankSystem 프로젝트를 만들어보면서 클래스와 구조체에 대해서 어설플게 알고 작업을 하다 보니 몇 가지 실수를 했다.

 

#include <iostream>
using namespace std;

struct Car {
	char gameID[100];
	int fuelGauge = 100;
	int curSpeed = 30;
};
void Accel(Car &car)
{
	car.fuelGauge -= 10;
	car.curSpeed += 10;
	cout << "================== Hit The Gas! ==================" << endl;
	cout << "Gas Left : "<< car.fuelGauge << endl;
	cout << "Current Speed : " << car.curSpeed << endl;
}

int main()
{
	Car car;
	cout << "================== Current State ==================" << endl;
	cout << "Gas Left : " << car.fuelGauge << endl;
	cout << "Current Speed : " << car.curSpeed << endl;
	cout << endl;
	cout << endl;
	cout << endl;
	Accel(car);
}

위 코드를 보면 Accel 이란 함수가 Car와 관련된 데이터의 처리를 담당하는 함수들이다.

그렇다면 Accel 함수는 Car 구조체에 종속적인 함수라고 말할 수 있다. 그런데도 불구하고 Car를 참조하여 그 안에 값에 접근을 하다 보니 다른 영역에서 이 함수를 호출하는 실수를 할 수도 있다.

 

다음은 구조체와 함수에 종속성을 더 강화해서 만든 코드이다.

#include <iostream>
using namespace std;

struct Car {
	char gameID[100];
	int fuelGauge = 100;
	int curSpeed = 30;

	void CurrentState() {
		cout << "================== Current State ==================" << endl;
		cout << "Gas Left : " << fuelGauge << endl;
		cout << "Current Speed : " << curSpeed << endl;
		cout << endl;
		cout << endl;
		cout << endl;
	}

	void Accel()
	{
		fuelGauge -= 10;
		curSpeed += 10;
		cout << "================== Hit The Gas! ==================" << endl;
		cout << "Gas Left : " << fuelGauge << endl;
		cout << "Current Speed : " << curSpeed << endl;
	}
};

int main()
{
	Car car;
	car.CurrentState();
	car.Accel();
}

Accel 함수를 구조체 안에 넣으면서 좀 더 합리적인 코드로 변경했다.

 

car라는 구조체가 만들어지고 그 안에

 

                                                              car 

변수 

                       int fuelGauge

                       int curSpeed

함수

                       void CurrentSpeed()

                       void Accel() 

이러한 형태로 저장이 된다

 

추가적으로 다음과 같이 함수의 원형 선언도 가능하다.

함수의 길이가 길어져서 가독성이 떨어진다면 다음에 방식을 이용하는 것이 좋을 수 도 있다.

 

#include <iostream>
using namespace std;

struct Car {
	char gameID[100];
	int fuelGauge = 100;
	int curSpeed = 30;

	void CurrentState();

	void Accel();
};

void Car::CurrentState() {
	cout << "================== Current State ==================" << endl;
	cout << "Gas Left : " << fuelGauge << endl;
	cout << "Current Speed : " << curSpeed << endl;
	cout << endl;
	cout << endl;
	cout << endl;
}

void Car::Accel()
{
	fuelGauge -= 10;
	curSpeed += 10;
	cout << "================== Hit The Gas! ==================" << endl;
	cout << "Gas Left : " << fuelGauge << endl;
	cout << "Current Speed : " << curSpeed << endl;
}
int main()
{
	Car car;
	car.CurrentState();
	car.Accel();
}
반응형

'c++ > 클래스의 기본' 카테고리의 다른 글

[C++] 용어정리: 객체, 멤버변수, 멤버함수  (0) 2022.12.30
[C++] 클래스(Class)  (0) 2022.12.30