1. class와 struct 차이
- class와 struct는 매우 유사
- 가장 큰 차이점은 class는
접근 제어 지시자
가 있음 - C++에서는 class, 상속 등의 문법을 통해 효율성을 제공
2. 클래스 기본 문법
- 클래스는 멤버변수, 멤버함수로 구성
- 접근제어지시자를 통해 멤버변수 및 멤버함수로의 접근을 제어할 수 있음
- 생성자, 소멸자가 있음
- 상속 및 다형성
class 클래스이름{
접근제어지시자:
멤버변수
멤버함수
};
3. 멤버 선언 및 초기화
생성자
를 이용하여 멤버변수 초기화멤버 이니셜라이저(member initializer)
에 의한 초기화
생성자를 이용한 멤버변수 초기화
// 생성자를 이용한 멤버변수 초기화
#include <iostream>
using namespace std;
class CTest
{
public:
int m_Data;
// 생성자, 생성자는 객체 생성 시 멤버 변수의 초기화를 담당
CTest()
{
m_Data = 10;
}
void PrintData()
{
cout << m_Data << endl;
}
};
int main()
{
CTest t;
t.PrintData();
return 0;
}
멤버 이니셜라이저를 이용한 멤버변수 초기화
#include <iostream>
using namespace std;
class CTest
{
public:
int m_Data1;
int m_Data2;
// 멤버 이니셜라이저를 이용한 초기화
CTest() : m_Data1(10), m_Data2(20)
{
// empty
}
void PrintData()
{
cout << m_Data1 << endl;
cout << m_Data2 << endl;
}
};
int main()
{
CTest t;
t.PrintData();
return 0;
}
4. 접근 제어 지시자
- 개발자와 사용자를 구분하기 위해 필요
- 멤버변수에 아무나 접근할 수 없게 하기 위함 -
정보은닉(Information Hiding)
- 접근 제어 지시자 종류
public
- 멤버에 대한 모든 외부 접근 허용protected
- 멤버에 대한 모든 외부 접근 차단(단, 상속 관계에 있는 클래스에서의 접근 허용)private
- 외부 접근 뿐만 아니라 상속 클래스로부터의 접근까지 차단(C++에서는 명시하지 않으면 default로 private으로 간주)
#include <iostream>
using namespace std;
class CMyData
{
// 접근제어지시자를 명시하지 않았기 때문에 private으로 간주
int m_Data;
public:
int GetData()
{
return m_Data;
}
void SetData(int nParam)
{
m_Data = nParam;
}
};
int main()
{
CMyData mydata;
mydata.SetData(10);
cout << mydata.GetData() << endl;
return 0;
}
5. 생성자(Constructor), 소멸자(Destructor)
- 객체의 생성과 소멸시 호출되는 일종의 함수
- 클래스 이름과 동일하며 소멸자의 경우 이름 앞에
~
붙음 - 생성자와 소멸자를 구현하지 않을 경우 컴파일러가 자동으로 Default 생성자와 소멸자 생성
#include <iostream>
using namespace std;
class CTest
{
public:
// 생성자(Constructor)
CTest()
{
cout << "CTest::CTest()" << endl;
}
// 소멸자(Destructor)
~CTest()
{
cout << "~CTest::CTest()" << endl;
}
};
// 전역변수 위치에서 객체를 생성
CTest b;
int main()
{
cout << "Begin" << endl;
// CTest a;
cout << "End" << endl;
return 0;
}
- 생성자와 소멸자의 호출 시점을 잘 알고 있어야 함
- 객체 생성시 생성자 호출, main()함수 종료시 소멸자 호출
- 단, 전역 위치에 객체를 생성한 경우 main()함수보다 먼저 생성자가 호출 됨
- 생성자는 오버로딩 가능, 소멸자는 오버로딩 불가능
본 포스팅 내용은
이것이 C++이다
를 학습한 내용을 바탕으로 요약한 글입니다. 코드에 문제가 있을 수 있으며 다소 부정확한 내용이 있을 수 있으니 참고하시기 바랍니다. 잘못된 내용이 있다면 덧글로 남겨주시면 내용을 반영하여 수정하도록 하겠습니다. 감사합니다.
[Reference]
[1] 이것이 C++이다, p.99-124