일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- PCA
- supervised learning
- 딥러닝
- 분류
- OpenAI
- 지도학습
- LLM
- 해커톤
- regression
- gpt
- Classification
- 머신러닝
- AI
- LG Aimers 4th
- Machine Learning
- ChatGPT
- deep learning
- GPT-4
- LG Aimers
- 티스토리챌린지
- 오블완
- LG
- 회귀
Archives
- Today
- Total
SYDev
C++ Chapter 06-1 : const개념 보충 본문
const 객체와 const 객체의 특성들
const는 변수를 상수화 하듯이, 객체도 상수화할 수 있다.
const int num = 10; // 변수 상수화
const SoSimple sim(20); // 객체 상수화
객체를 상수화한다는 것은 객체의 데이터 변경을 허용하지 않겠다는 뜻과 같다. 때문에 상수화된 객체를 대상으로는 const 멤버함수의 호출 이외에는 할 수 있는 것이 없다. 변경시킬 능력이 있는 함수는 아예 호출이 불가능하다는 것이.
예제를 통해 const 객체의 특성을 확인해보자.
#include <iostream>
using namespace std;
class SoSimple
{
private:
int num;
public:
SoSimple(int n) : num(n)
{ }
SoSimple& AddNum(int n)
{
num += n;
return *this;
}
void ShowData() const
{
cout<<"num: "<<num<<endl;
}
};
int main(void)
{
const SoSimple obj(7);
// obj.AddNum(20); -> const 함수가 아니기 때문에 호출 불가능
obj.ShowData(); // const 함수이기 때문에 호출 가능
return 0;
}
num: 7
위 특징을 통해서 우리는 저장된 값을 변환하지 않는 함수에는 가급적으로 const를 붙여서 const 객체에서도 호출가능하도록 만들어야 한다는 것을 알 수 있다.
const와 함수 오버로딩
함수 오버로딩이 성립하려면 매개변수의 수나 자료형이 달라야 하는데, 다음과 같이 const의 선언 유무도 오버로딩의 성립 조건에 해당된다.
void SimpleFunc() { . . . . }
void SimpleFunc() const { . . . . }
이와 관련된 예제를 확인해보자.
#include <iostream>
using namespace std;
class SoSimple
{
private:
int num;
public:
SoSimple(int n) : num(n)
{ }
SoSimple& AddNum(int n)
{
num += n;
return *this;
}
void SimpleFunc()
{
cout<<"SimpleFunc : "<<num<<endl;
}
void SimpleFunc() const
{
cout<<"const SimpleFunc : "<<num<<endl;
}
};
void YourFunc(const SoSimple &obj) // const 참조자를 인자로 받음
{
obj.SimpleFunc(); // obj는 const 참조자이기 때문에 const 멤버함수가 호출된다.
}
int main(void)
{
SoSimple obj1(2);
const SoSimple obj2(7);
obj1.SimpleFunc();
obj2.SimpleFunc();
YourFunc(obj1);
YourFunc(obj2);
return 0;
}
SimpleFunc : 2
const SimpleFunc : 7
const SimpleFunc : 2
const SimpleFunc : 7
출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12
'Programming Lang > C++' 카테고리의 다른 글
C++ Chapter 06-3 : C++에서의 static (0) | 2023.07.17 |
---|---|
C++ Chapter 06-2 : 클래스와 함수에 대한 friend 선언 (0) | 2023.07.17 |
C++ Chapter 05-3 : 복사 생성자의 호출 시점 (0) | 2023.07.17 |
C++ Chapter 05-2 : '깊은 복사'와 '얕은 복사' (0) | 2023.07.17 |
C++ Chapter 05-1 : 복사 생성자(Copy Constructor) (1) | 2023.07.16 |