[C++] 클래스

나장승현
|2024. 6. 25. 23:20

객체, 클래스, 인스턴스

  • 객체 : 변수들과 그와 관련된 메서드들이 모인 하나의 집합체
  • 클래스 : 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;
};

'💻 Computer Science > C & C++' 카테고리의 다른 글

[C++] 스마트 포인터  (0) 2024.06.04
[C++] 템플릿  (1) 2024.06.04
[C++] 관계  (0) 2024.06.04
[C++] 상속  (0) 2024.06.02
[C++] 연산자 다중 정의  (0) 2024.04.15