티스토리 뷰
반응형
📌 클래스에서 const
오버로딩 — 왜 필요한가?
1️⃣ 개념부터 잡기: const
오버로딩이란?
C++에서는 멤버 함수에 const를 붙여 오버로딩할 수 있습니다.
이것은 동일한 함수 이름이지만, 객체가 const인지 아닌지에 따라 서로 다른 함수 버전이 호출되도록 합니다.
class Sample {
public:
int getValue() const; // const 객체에서 호출됨
int getValue(); // 일반 객체에서 호출됨
};
🔍 즉, const는 함수 시그니처의 일부이며, 오버로딩이 가능합니다.
2️⃣ 왜 필요한가? — const
객체의 함수 호출 제한
C++에서 const 객체는 const 멤버 함수만 호출할 수 있습니다.
const Sample s;
s.getValue(); // -> const 버전만 호출 가능
만약 const 함수가 정의되지 않았다면, 컴파일 에러가 발생합니다.
3️⃣ 실전 코드 예제: const 오버로딩 없을 때와 있을 때
✅ const 오버로딩 없는 경우 (컴파일 에러 발생)
#include <iostream>
using namespace std;
class Item {
int value;
public:
Item(int v) : value(v) {}
int getValue() { // const 아님
return value;
}
};
int main() {
const Item item(10);
cout << item.getValue() << endl; // ❌ 에러 발생
return 0;
}
🔴 컴파일 오류 메시지 (예시):
error: passing 'const Item' as 'this' argument discards qualifiers
✅ const 오버로딩 적용한 경우
#include <iostream>
using namespace std;
class Item {
int value;
public:
Item(int v) : value(v) {}
int getValue() const { // const 객체용
cout << "[const 버전 호출] ";
return value;
}
int getValue() { // 일반 객체용
cout << "[일반 버전 호출] ";
return value;
}
};
int main() {
const Item constItem(10);
Item nonConstItem(20);
cout << constItem.getValue() << endl; // ✅ const 버전 호출
cout << nonConstItem.getValue() << endl; // ✅ 일반 버전 호출
return 0;
}
✅ 출력 결과:
[const 버전 호출] 10 [일반 버전 호출] 20
반응형
4️⃣ const 오버로딩 정리표
✔️ const 멤버 함수는 멤버를 수정하지 않겠다는 약속입니다.
✔️ const 객체에서는 const 멤버 함수만 호출 가능합니다.
5️⃣ const 오버로딩이 필요한 실제 상황들
- vector, string 등 표준 라이브러리에서 많이 사용합니다.
- getter 함수는 const 객체에서도 호출할 수 있어야 하므로 const로 선언합니다.
- 멤버 값을 변경하지 않는다면, 무조건 const 함수로 선언하는 것이 좋습니다.
int getSize() const; // 데이터를 건드리지 않는 getter는 이렇게 선언!
✅ 최종 요약
💬 한마디 요약
“const 객체는 const 함수만 부른다. 수정 안 할 거면 const 함수로 선언하자!”
반응형
'프로그래밍 > 홍정모의 따라배우는 C++' 카테고리의 다른 글
정적 멤버 함수(static member function)이란? C++ (0) | 2025.05.18 |
---|---|
정적 멤버 변수란? 클래스, C++ (0) | 2025.05.14 |
왜 인자 전달 앞에 붙이는 const를 붙일까? (0) | 2025.05.13 |
클래스에서 Const란? 1편 (0) | 2025.05.13 |
C++ 헤더와 소스파일의 분리 (0) | 2025.05.13 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 강화학습
- 티스토리챌린지
- 코딩테스트
- 파이썬
- 오블완
- stl
- 류근관
- 일본어문법무작정따라하기
- 인프런
- 인지부조화
- 윤성우
- 통계
- 통계학
- C
- 뇌와행동의기초
- 열혈프로그래밍
- C/C++
- 보세사
- 사회심리학
- 일문따
- 데이터분석
- 심리학
- 백준
- c++
- 여인권
- 정보처리기사
- Python
- K-MOOC
- 일본어
- 회계
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함