Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 배열
- string
- Python
- raw data
- programming
- Object Oriented Programming
- function
- pointer
- 반복문
- pass by reference
- 파이썬
- vscode
- 백준
- 오블완
- Deep Learning
- 티스토리챌린지
- Pre-processing
- C++
- 함수
- const
- array
- baekjoon
- OOP
- assignment operator
- Data Science
- Class
- predictive analysis
- 문자열
- 포인터
- 알고리즘
Archives
- Today
- Total
Channi Studies
[C++] 상수 클래스 | Using const with Classes 본문
C++에서는 클래스에도 상수 (const) 개념을 적용할 수 있습니다.
const가 적용된 클래스는 속성(attribute)를 변경할 수 없습니다.
그렇다면 속성의 멤버 함수를 호출하면 어떻게 될까요?
const Player villain {"Villain", 100, 55};
villain.set_name("Thanos"); // COMPILER ERROR
std::cout << villain.get_name() << std::endl; // COMPILER ERROR
villain 객체를 생성 후 멤버 함수들을 호출하자, 컴파일 에러가 발생합니다.
set_name()은 딱 봐도 이름 속성을 변경하는 거니까 그렇다고 해도,
이름을 반환하는 get_name()도 동일한 종류의 오류가 발생합니다.
C++에서 저러한 메소드도 잠재적으로 클래스를 modify할 수 있다고 판단하기 때문입니다.
그렇다면 이를 해결할 방법은 무엇일까요?
클래스 정의에서 메소드 프로토타입 마지막에 const 키워드를 입력하면 됩니다.
class Player{
private:
...
public:
std::string get_name() const;
...
};
이렇게 한 단어만 입력을 완료하면 컴파일 에러가 발생하지 않습니다.
심지어, 컴파일러가 해당 메소드를 판단하여 만약 해당 메소드가 속성을 변경하려고 한다면 컴파일 에러가 발생합니다.
에러를 사전에 방지할 수 있는 셈 입니다.
위의 예시로 돌아가서,
const Player villain {"Villain", 100, 55};
villain.set_name("Thanos"); // COMPILER ERROR
std::cout << villain.get_name() << std::endl; // OK
set_name()은 여전히 에러가 발생할 것 입니다.
속성을 변경하니까, const 개념과 배치되기 때문입니다.
하지만 get_name() 메소드는 이제 잘 실행됨을 확인할 수 있습니다.
'C++ > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
[C++] 클래스 friend | friends of a Class (0) | 2024.01.02 |
---|---|
[C++] 스태틱 클래스 멤버 | Static Class Members (0) | 2024.01.02 |
[C++] this keyword | this 포인터 (0) | 2024.01.02 |
[C++] Move Constructor | 이동 생성자 (1) | 2024.01.02 |
[C++] Shallow Copying & Deep Copying | 얕은 복사 & 깊은 복사 (1) | 2023.12.29 |