간단하게 보면 구조체 + 함수
라고 볼 수 있지만,
알면 알수록 정신세계를 안드로매다로 보내버리는 "아~ 그대의 이름은 클래스".
뭐 특징으로는
데이터 추상화네
캡슐화네
정보은닉, 다형성, 상속, 높은 재활용 등..
참 많지만 저런 이야기는 좀더 완벽하게 구사 할 수 있을때나 가능한거 같고,
바로 실전 코드로 알아 보자.
#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 |