[C++] 클래스와 구조체의 비교

2022. 6. 22. 16:22코딩 1막 <C++개념편>/코딩 1막 <C++응용편>

728x90

1. <구조체 struct 일때>

#include <iostream>
#include <string>

using namespace std;

struct TravelToWorld
{
	string name;
	int time;
	int money;

	TravelToWorld()
	{
		cout << "(struct용) 세계여행 생성자" << endl;
	}

	TravelToWorld(string _name, int _time, int _money)
	{
		name = _name;
		time = _time;
		money = _money;
		cout << name << "(struct용) 세계여행 생성자" << endl;
	}

	~TravelToWorld()
	{
		cout << name << "(struct용) 세계여행 소멸자" << endl;
	}
};

void main()
{
	TravelToWorld travelToWorldA("한국", 10, 10000);
	cout << travelToWorldA.name << endl;

	TravelToWorld* travelToWorldB;
	travelToWorldB = new TravelToWorld("일본", 20, 50000);
	cout << travelToWorldB->name << endl;
	delete travelToWorldB;

}

출력 결과

2. <클래스 class일때>

#include <iostream>
#include <string>

using namespace std;

// 클래스
class TravelToWorld
{
private:		// 이 아래로는 이 클래스 내부 전용입니다
public:			// 이 아래로는 외부에서도 참조할수 있게 열려진 영역입니다
	string name;
	int time;
	int money;

	TravelToWorld()
	{
		cout << "(class용) 세계여행 생성자" << endl;
	}

	TravelToWorld(string _name, int _time, int _money)
	{
		name = _name;
		time = _time;
		money = _money;
		cout << name << "(class용) 세계여행 생성자" << endl;
	}

	~TravelToWorld()
	{
		cout << name << "(class용) 세계여행 소멸자" << endl;
	}
};

void main()
{
	TravelToWorld travelToWorldA("한국", 10, 10000);
	cout << travelToWorldA.name << endl;

	TravelToWorld* travelToWorldB;
	travelToWorldB = new TravelToWorld("일본", 20, 50000);
	cout << travelToWorldB->name << endl;
	delete travelToWorldB;
}

출력 결과

3. <접근제한자 private, protected, public>

#include <iostream>
#include <string>

using namespace std;

class TravelToWorld
{		
	// 접근제한자 public과 private

private:	// 상속불가능, 이 아래로는 이 클래스 내부전용 영역
protected:	//이 아래로는 선심써서 자식까지는 참조할 수 있는 영역
	string name;
	int time;
	int money;

public:		// 상속가능, 이 아래로는 외부에서도 참조할수 있게 알려진 영역 	
	void virtual PrintInfo()
	{
		cout << "정보출력" << endl;
		cout << "이름 : " << name << " / " << "시간 : " << time << "시간 / " << "경비 : " << money << "원" << endl;
	}

	TravelToWorld() {}

	TravelToWorld(string _name, int _time, int _money)
	{
		name = _name;
		time = _time;
		money = _money;
	}

	~TravelToWorld() {}
};

class Japan : public TravelToWorld
{
private:
	bool isGo = false;
public:
	Japan() {}
	Japan(string _name, int _time, int _money, bool _isGo) : TravelToWorld(_name, _time, _money)
	{
		isGo = false;
	}

	void PrintInfo()
	{
		cout << "정보출력" << endl;
		cout << "Japan클래스는 부모의 개인적인 영역인 멤버변수들을 참조할 수 없다" << endl;
	}

	void Go()
	{
		cout << "가즈아" << endl;
	}
};

void main()
{
	TravelToWorld travelToWorldA("일본", 10, 10000);
	Japan japanA;

	TravelToWorld* travelToWorldPtr;
	travelToWorldPtr = &japanA;
	travelToWorldPtr->PrintInfo();

	japanA.Go();
	japanA.PrintInfo();
	travelToWorldA.PrintInfo();
}

 

728x90