본문 바로가기
프로그래밍/C++

class(클래스) ~ C++의 꽃 ~

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 19.




간단하게 보면 구조체 + 함수
라고 볼 수 있지만,

알면 알수록 정신세계를 안드로매다로 보내버리는 "아~ 그대의 이름은 클래스".

뭐 특징으로는

데이터 추상화네
캡슐화네
정보은닉, 다형성, 상속, 높은 재활용 등..

참 많지만 저런 이야기는 좀더 완벽하게 구사 할 수 있을때나 가능한거 같고,

바로 실전 코드로 알아 보자.

 

#include <iostream>

class AAA		// AAA라는 클래스 선언
{
public:			// public으로 생성되는 int a
	int a;

	int fun(int a){ return a; }		// 함수도 가능
};	// 클래스의 끝에는 ; 필요

void main()
{
	AAA aaa;	// AAA 클래스의 aaa 객체

	std::cout << aaa.fun(10) << std::endl;	// 사용은 구조체와 동일
}



딱 봐도 구조체와 비슷,

시작은 미비하나 그 끝은 위대할 터이니,

클래스 내부에 무언가 선언(정의)할 떄에는 public과 protected, private 타입이 존재한다.

public은 공개
private는 자신만 공개
protacted는 특정한 상대에게만 공개

어떻게 설명해야 쉽게 설명할 수 있는가에 대한 답은 없는거 같고,

각각 특징과 어떻게 사용해야 하는지에 대해선 빠른 시일내에 다시 자세히 포스팅 하겠음. 일단 오늘은 사용법에 대해서만 알아 보도록 하자.

클래스 외부의 함수도 정의와 선언을 따로 할 수 있는데

외부 정의는 이 처럼 하면된다.

// 리턴타입 클래스이름::함수이름(인자값)
int AAA::fun(int a)
{
	return a;
}


그리고 클래스는 생성자와 소멸자가 존재 하는데, 간략하게 한번 살펴 보자.

class AAA		// AAA라는 클래스 선언
{
public:			// public으로 생성되는 int a
	int a;

	AAA()	// 생성자, 물론 선언과 정의를 따로 하는것도 가능하다.
	{
		a = 100;
	}

	int fun(){ return a; }	// 함수도 가능
};	// 클래스의 끝에는 ; 필요


생성자의 가장 큰 능력은 클래스를 main에서 객체화 함과 동시에 초기화가 된다는 것이 가장 큰 능력이라고 볼 수 있다.
물론 여기엔 디폴트 매개변수도 가능! 좀더 다향한 재미를 맛볼 수 있는데, 직접 보면 이렇다.

 

#include <iostream>

class AAA		// AAA라는 클래스 선언
{
public:			// public으로 생성되는 int a
	int a;

	AAA(int _a=10)
	{
		a = _a;
	}

	int fun(){ return a; }	// 함수도 가능
};	// 클래스의 끝에는 ; 필요

void main()
{
	AAA aaa(100);	// AAA 클래스의 aaa 객체

	std::cout << aaa.fun() << std::endl;	// 사용은 구조체와 동일
}



당연한 이야기겠지만

AAA aaa; // AAA 클래스의 aaa 객체


이처럼 해주면 aaa::a 의 값은 10이 들어 갈 것이다.
사실 아직 public과 private, protacted에 대해서 설명하기전에 생성자를 말해놔서 당장은 왜 저렇게 하나...
싶기도 하겠지만 그것은 곧 알게 될테고(아마 뼈저리게...)

시작할 때 생성자가 있다면

끝날 때에는 소멸자가 존재한다.


class AAA		// AAA라는 클래스 선언
{
public:			// public으로 생성되는 int a
	int a;

	AAA(int _a=10)
	{
		a = _a;
	}
	~AAA()
	{
		a = 0;
		std::cout << a << std::endl;
	}

	int fun(){ return a; }	// 함수도 가능
};	// 클래스의 끝에는 ; 필요

 

결과 값은
10
0
이 나오게 된다.(main부분은 위 main 코드와 동일)



어찌 보면 당장은 생성자 보단 소멸자에 더 끌릴지도 모르겠다 메모리 삭제나 그외 종료하면서 해줘야 하는 일들을 소멸자에 넣으면 잊어 버리더라도 객채가 사라질때 소멸자에서 일을 해주기 때문이다.
시간이 늦어서(아 졸려) 뭔가 발로 쓴 느낌이 들지만. 큰 맥락은 다 잡은것 같다. 좀더 상세하고 재미잇고 세부적이고 짜증나고 분노가 치밀어 오르고 답답하고 열받는 이야기는 빠른 시일 내에 맑은 정신으로 다시 포스팅할 계획!(public과 그 친구들에 대해서도)

'프로그래밍 > C++' 카테고리의 다른 글

객체 포인터 배열  (0) 2010.03.21
클래스의 활용  (0) 2010.03.20
레퍼런스(Reference)  (0) 2010.03.18
new & delete  (0) 2010.03.17
const 상수화  (0) 2010.03.17