객체, 클래스, 인스턴스
- 객체 : 변수들과 그와 관련된 메서드들이 모인 하나의 집합체
- 클래스 : C의 구조체에서 확정된 변수, 객체, 함수를 포함한 하나의 틀
- 인스턴스 : 클래스를 기반으로 한 변수
접근 제어 지시자
- public : 외부 접근 허용
- protected : 외부 접근 차단, 파생 클래스에서의 접근 허용
- private : 외부 접근 차단(default)
기본 문법
class CTest
{
public:
int m_nData;
void Func(void)
{
}
};
생성자와 소멸자
- 반환 자료형이 없음
- 호출는 함수가 아니라 적절한 시기에 내부에서 자동으로 호출되는 함수
- 생략할 수 있으나 생략할 경우 컴파일러가 만들어 넣음
- 생성자는 다중 정의가 가능하나 소멸자는 불가능
- 소멸자는 앞에 ~가 붙음
생성자 멤버변수 초기화 방법
class CTest
{
public:
CTest()
{
m_nData = 5;
}
/*Test() : m_nData(5);
{
}*/
int m_nData;
};
동적 객체 생성과 소멸
int main()
{
CTest *a = new CTest;
CTest *b = new CTest[3];
delete a;
delete [] b;
}
참조 형식 멤버 초기화
class CRefTest
{
public:
CRefTest(int &nParam) : m_nData(nParam) { };
// CRefTest(int nParam) : m_nData(nParam) { }; 쓰레기 값으로 초기화
// CRefTest(int &nParam) { m_nData = nParam }; 컴파일 오류
private:
int &m_nData;
};
int main() {
int a = 10;
CRefTest t(a);
return 0;
}
생성자 위임
class CMyPoint
{
public:
CMyPoint(int x)
{
m_x = 100;
}
CMyPoint(int x, int y) : CMyPoint(x)
{
m_y = 200;
}
private:
int m_x = 0;
int m_y = 0;
};
명시적 디폴트 생성자
- 다음과 같이 생성자의 선언과 정의를 분리해야 할 경우 default 예약어를 사용해 선언과 정의를 한 번에 가능
- 삭제하는 delete예약어도 존재
class CTest
{
public:
CTest(void);
int m_nData = 5;
};
CTest::CTest(void) { }
class CTest
{
public:
CTest(void) = default;
int m_nData = 5;
};