Adaid's Workroom
[세가] C++ 보충 (2) 본문
질문
5. 멤버함수 선언 뒤 붙는 const가 뜻하는 의미를 아는가? 붙이는 조건을 설명할 수 있는가?6. operator 계열 멤버함수 사용법은 아는가? 직접 선언하고 사용할 수 있는가?
7. enum을 클래스나 구조체처럼 사용할 수 있는지 알고 있는가? 활용할 수 있는가?
8. delete와 delete[] 차이를 말할 수 있는가? 왜 두 종류가 있는지 설명할 수 있는가?
9. C++ 문자열은 0 (NULL문자)을 종료 기호로 한다는 사실을 이해하는가?
보충
5. 멤버함수에서 const
멤버함수 뒤에 붙는 const는 '이 함수를 호출해도 클래스 멤버는 변경되지 않는다'고 컴파일러에 알리는 역할을 한다.
그리고 만약 변수가 const인 경우에는 const가 붙어 있는 함수밖에 호출할 수 없다.
class A {
public:
void func1() const;
void func2();
}
이런 경우 다음과 같이 const인 A를 인수로 같는 함수 foo()에서는 func1() 밖에 호출할 수 없다.
void foo( const A& a ) {
a.func1(); //OK
a.func2(); //컴파일 오류
}
또한 const인 멤버함수에서는 const가 아닌 멤버함수를 호출할 수 없다.
void A::func1() const {
func2(); //이 함수는 const가 아니므로 오류
}
이런 방식으로 A 내용이 변경되지 않는다고 보증하는 것이다.
8. 두 가지 delete
~T()는 소멸자다.
deallocate()는 가상의 함수이고 사용하고 있던 메모리에 '이제 사용하지 않는다'고 포식을 붙여 해제하는 처리라고 하자.
즉 소멸자를 호출하고 메모리를 해제하는 처리가 delete이다.
delete[]는 arraySize만큼 소멸자를 호출하고 메모리를 해제하는 처리다.
arraySize가 어디에 있는지는 컴파일러 방식에 따라 다른데 보통 p 근처에 숨어있다.delete[]를 호출해야할 곳에서 delete를 호출하면 맨 처음 요소 하나만 소멸자가 호출된다.
반대로 delete를 호출해야할 곳에서 delete[]를 호출하면 이상한 값을 arraySize로 착각하고 오작동할 수 있다.
9. 문자열 상수
C++에서 제공하는 기본형 중에 문자열 형은 없다.
문자열 상수는 'char 배열을 쉽게 정의하는 편리한 문법'이라고 할 수 있다.
const char bake[] = "baka";
const char baka[5] = { 'b', 'a', 'k', 'a', '\0' };
""로 에워싼 것은 단순한 char 배열에 지나지 않으며 마지막에는 \0도 붙어 있다.
그러므로 baka의 크기는 4가 아닌 5이다.
const char* aho = "aho"
마찬가지로 이것은 다음 코드를 생
'서적 공부 > 게임 프로그래밍의 정석' 카테고리의 다른 글
[세가] 팁:참조 (0) | 2017.12.22 |
---|---|
[세가] 팁:포인터와 메모리 (0) | 2017.12.20 |
[세가] 팁:플래그 (0) | 2017.12.19 |
[세가] C++ 보충 (1) (0) | 2017.12.17 |