728x90
반응형
Preview
- class 01에서 class는 [구조체+함수]와 유사하했다.
- 사실 여기에 부가적으로 알파가 추가되어야한다.
- 알파에는 접근제어자+상속 등등이 있다.
- class와 구조체(struct) 멤버에는 Data와 Function이 있다
- class에서 Function을 Method라고 부른다
접근제어
- class를 통해 Object를 구현가능 이때, 객체의 내부와 외부 기억
- 외부에서 내부로 접근하는걸 통제하는게 필요 why? 문제방지
- 만약 다 public처럼 사용가능하면 class의 기능을 잃는다
생성자 / 소멸자
- C++ class는 [생성자/소멸자] 제공하며 이는 함수다.
- [생성자/소멸자]는 호출시점 특정할수없음 -> 자동으로 호출
- 호출시점은 문법에 의해 이미 정해짐 프로그래머가 개입해 수정X
- [생성자/소멸자]는 반환이 없다
C++ 생성자 test 코드
class CTest
{
public:
CTest() // 생성자
{
std::cout << "CTests()" << std::endl;
}
};
CTest b;
int main(void)
{
std::cout << "Begin of main()" << std::endl;
CTest a;
return 0;
}
- tests코드 실행시 CTest b -> main -> CTest a 순서대로 호출됨
- C에선 main()이 시작점이였다면 C++에선 그렇지 않음을 기억
C++ 소멸자 test 코드
class CTest
{
public:
CTest()
{
std::cout << "CTests()" << std::endl;
}
~CTest() // 소멸자
{
std::cout << "~CTests()" << std::endl;
}
};
int main(void)
{
std::cout << "Begin of main()" << std::endl;
CTest a;
std::cout << "End of main()" << std::endl;
return 0;
} // scope가 닫히는 시점
- test코드 실행시 Begin -> CTest -> End -> ~CTest 순으로 실행
- main의 스코프가 닫히는 시점이 지역변수의 소멸시점이다
- 이때 모든 소멸자가 call됨을 기억
new/delete
-C에 malloc/free, C++은 new/delete를 사용 둘은 비슷하나 다름
new/delete VS malloc/free
class CTest
{
public:
CTest()
{
std::cout << "CTests()" << std::endl;
}
~CTest()
{
std::cout << "~CTests()" << std::endl;
}
};
int main(void)
{
// 생성자 호출이 안됨
CTest *pTest = (CTest*)malloc(sizeof(CTest));
free(pTest);
// 생성자 호출 됨
CTest *pNewTest = new CTest;
delete pNewTest;
return 0;
}
- 실행시 pTest는 생성자 호출이 안됨 왜냐 pTest가 가리키는건 CTest데이터가 들어갈수있는 메모리인건지 CTest가 아니기 때문
- pNewTest는 생성자와 소멸자 호출 가능
- new는 "그 인스턴스냐" malloc은 "그 인스턴스를 담을수 있을 정도에 충분한 메모리 크기냐" 를 의마하니 서로 다름을 기억
728x90
반응형
'C++ 공부' 카테고리의 다른 글
constructor 03 (0) | 2021.08.20 |
---|---|
constructor 02 (0) | 2021.08.20 |
constructor 01 (0) | 2021.08.20 |
class 03 (0) | 2021.08.20 |
class 01 (0) | 2021.08.19 |