반응형
클래스
C++와 C의 차이중 하나인 클래스를 알아보자. 여기서, 클래스에 대한 이론적 특징은 많이 다루지 않을 것이고, 필자는 대학 학부에서 Java를 배웠으므로 차이점과 사용방법에 중점을 둔다.
클래스 선언
class MyClass
{
...
};
기존 구조체에서 struct를 class로 바꾸기만 하면 된다.
접근 제한 지정자
private:
public:
protected:
자바에서 하는 기능과 동일하게 작동한다.
- private: 클래스 외부에서 접근 제한
- public: 클래스 외부에서 접근 허용
- protected: 상속된 클래스에서 접근 허용
protected는 상속에서 조금더 다룰 예정이다.
자바에서는 멤버들 앞에 일일이 제한자를 적어주었지만 c++에선 <제한자:>밑으로 나오는 멤버들은 모두 앞서나온 제한자의 영향을 받는다.
멤버와 멤버함수(메소드)
public:
int a;
float b;
void PrintA()
{
printf("A\n");
}
제한자 다음 변수선언은 기존의 변수선언과 같고 멤버함수 또한 일반적으로 함수를 선언하듯 선언하면 된다.
생성자와 소멸자
public:
//생성자
MyClass()
: a(1)
, b(2) //이니셜라이저
{
printf("생성");
}
//소멸자
~MyClass()
{
printf("소멸");
}
자바에서는 이니셜라이져는 본적이 없는 것 같은데, c++에는 있었다. 변수를 초기화할때, 생성자 함수에서 초기화하지않고 이니셜라이저라는 과정에서 먼저 초기화를 하고, 생성자를 호출한다. 소멸자는 해당 클래스가 소멸할때 실행된다.
클래스 기본 예제
#include <stdio.h>
class Cls
{
// 멤버
public: // 공개
int a;
float d;
private: // 비공개
int b;
protected: // 상속된 클래스에겐 공개
int c;
// 생성자, 소멸자
public:
// 생성자
Cls()
: a(1), b(2) // 이니셜라이져
{
printf("생성 a: %d\n", a);
}
// 소멸자
~Cls()
{
printf("소멸");
}
public:
// 멤버 함수(메소드)
void PrintB()
{
printf("b: %d\n", b);
}
};
int main()
{
// 객체 생성
Cls c; // 생성자가 실행되고 <생성 a: 1> 이 출력됨
// a가 정상적으로 초기화 됬는지 확인. b와 c는 클래스외부에서 접근이 불가능한 상황
printf("메인 a: %d\n", c.a);
// b는 외부에서 접근이 불가능 하지만, 메소드를 통해서 b를 출력함.
c.PrintB();
return 0;
// 메인함수가 끝나면서, c라는 객체도 소멸하기 때문에 소멸자 호출됨.
}
예제 코드를 돌리면서 위의 글들을 읽어보면 이해하는데 도움이 될것이다.
추가)
자바에서 객체의 멤버에 접근할때 사용하는 this가 c++에도 있다.
this->a
구조체 포인터처럼 화살표를 사용하면 된다.
반응형
'프로그래밍 언어 > cpp' 카테고리의 다른 글
[C++] 클래스 템플릿 (0) | 2023.02.11 |
---|---|
[C++] 레퍼런스(reference)와 클래스 연산자(operator) (0) | 2023.02.10 |
[C++] 함수 포인터 (0) | 2023.02.08 |
[C++] void* 보이드 포인터 (0) | 2023.02.08 |
[C++] 상수(const)와 포인터 (0) | 2023.02.08 |