티스토리 뷰
#include <iostream>
class Something
{
public:
int m_value = 0;
void setValue(int value)
{
m_value = value;
}
int getValue()
{
return m_value;
}
};
int main()
{
const Something something;
something.setValue(3); // error 발생
return 0;
}
setValue가 하는일은 m_value를 바꾸어주는 일이다.
그렇기 때문에 애초에 잘못된 코드가 되는 것이다.
cout << something.getValue() << endl; // error 발생
단지 값을 갖고와서 출력하는 코드인데 오류가 발생하는 이유는?
컴파일러가 판단을 할때에는 m_value가 바꿨냐 안 바꿨냐가 아니라 member function이 const냐 아니냐로 판단한다.
memeber function의 const는 이 함수 안에서 멤버 variable을 바꾸는 행위를 하지 않는다라는 의미를 내포한다.
int getValue() const
{
return m_value;
}
error의 예시
// error 발생
void setValue(int value) const
{
m_value = value;
}
#include <iostream>
using namespace std;
class Something
{
public:
int m_value = 0;
// 3
Something(const Something& st_in)
{
m_value = st_in.m_value;
cout << "copy constructor" << endl;
}
// 1
Something()
{
cout << "Constructor" << endl;
}
void setValue(int value)
{
m_value = value;
}
int getValue() const
{
return m_value;
}
};
void print(const Something &st) // const & 안 사용할 시 복사가 일어남
{
cout << &st << endl;
cout << st.m_value << endl;
}
int main()
{
// 0
Something something;
cout << &something << endl;
// 2
print(something);
return 0;
}
// Constructor
// 0x7fff8a475a04
// 0x7fff8a475a04
// 0
const를 이용한 오버로딩
#include <iostream>
#include <string>
using namespace std;
class Something
{
public:
string m_value = "default";
const string& getValue() const
{
cout << "const version" << endl;
return m_value;
}
string& getValue()
{
cout << "non-const version" << endl;
return m_value;
}
};
int main()
{
Something something;
something.getValue();
const Something something2;
something2.getValue();
return 0;
}
// non-const version
// const version
'언어 > C++' 카테고리의 다른 글
8.11 정적 멤버 함수 (0) | 2020.04.24 |
---|---|
8.10 정적 멤버 변수 (0) | 2020.04.23 |
8.5 위임 생성자 (0) | 2020.04.22 |
8.4 생성자 멤버 초기화 목록 (0) | 2020.04.22 |
8.3 생성자 Constructors (0) | 2020.04.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 포인터
- 다차원 배열
- 재귀함수
- 회전리스트
- C
- Algorithm
- call by value
- 공간복잡도
- 비트필드
- 1차원 배열
- call by reference
- 구조체
- 직접 지정
- 강의
- 간접 지정
- 종류
- 파이썬
- 공부
- codeit
- 자료구조
- 3차원 배열
- 프로그래밍
- inflearn
- 알고리즘
- 시간복잡도
- 2차원 배열
- 공용체
- timecomplexity
- 형승격
- 배열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함