본문 바로가기

강의자료/C/C++

034. 클래스란 무엇인가?


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


클래스란 자료(데이터)를 좀 더 체계적으로 다루기 위한 사용자 정의 타입이다.
우선, 어떻게 만들고 어떻게 사용하는지부터 살펴본 후 어떤 용도로 사용을 하는지 생각해보자.
#include 
using namespace std;

// c : 구조체 -> 자료의 묶음.
// c++ : 클래스 -> 자료의 묶음 + 보안 + 함수.

// 클래스에서...
// 생성자를 만들지 않을 경우, 컴파일러가 자동으로 기본 생성자를 만들어준다.
// 생성자를 만들경우, 컴파일러는 더이상 기본 생성자를 만들어주지 않는다.
// 기본 생성자란, 입력을 받지 않고 모든 멤버변수를 0으로 초기화 한다.

class Point
	//struct Point		// 기본값이 public:
{
	//public:
	int x;
	//private:	// -> 기본값.
	//protected:
	int y;
	//int ary[1000];

public:
	void Show()
	{
		cout << "(" << x << ", " << y << ")" << endl;
	}

	void Set(int x, int y)
	{
		this->x = x;
		this->y = y;
	}

	// 생성자 -> 생성될 때 호출되는 함수.
	Point(int x, int y)
	{
		this->x = x;
		this->y = y;
	}
	Point()	// 함수 오버로딩.
	{
		this->x = 0;
		this->y = 0;
	}

	// 소멸자 -> 소멸될 때 호출되는 함수.
	~Point()
	{
		//cout << "Point Destructor Call" << endl;
	}
};

class Calc
{
public:
	float Plus(float m, float n)
	{
		return m+n;
	}

	float Minus(float m, float n)
	{
		return m-n;
	}

	float Multiply(float m, float n)
	{
		return m*n;
	}

	float Divide(float m, float n)
	{
		return m/n;
	}
};

void main( )
{
	int x = 100;
	int y = 200;

	// 배열의 단점
	// 1.모든 원소가 같은 타입이다.
	// 2.접근하는 이름이 모두 같다.
	int xy[2] = {100, 200};

	// Point -> 클래스, pt -> 객체
	//Point pt = {100, 200};
	//Point pt;
	//pt.Set(100, 200);
	Point pt(100, 200);

	//Point pt;	// 기본 생성자가 없을 경우, 에러가 되는 코드.

	// 	pt.x = 300;
	// 	pt.y = 400;
	pt.Set(300, 400);

	//cout << "(" << pt.x << ", " << pt.y << ")" << endl;
	pt.Show();

	//Point pt2 = {111, 222};
	Point pt2(111, 222);

	//cout << "(" << pt2.x << ", " << pt2.y << ")" << endl;
	pt2.Show();

	pt2.Set(333,444);
	pt2.Show();

	Calc calc;

	// 클래스에서 자료저장 기능을 빼고 함수기능만 사용할 경우,
	// 비슷한 함수끼리 그룹을 지어주는 형태가 되기도 한다. (네임스페이스와 동일한 역할.)
	cout << calc.Plus(300, 200) << endl;
	cout << calc.Minus(300, 200) << endl;
	cout << calc.Multiply(300, 200) << endl;
	cout << calc.Divide(300, 200) << endl;
}