c++ class 와 const
728x90
#include <iostream>
#include <string>
using namespace std;
class Something
{
public:
int m_value = 0;
Something(const Something& st_in)
{
m_value = st_in.m_value;
cout << "복사 생성자" << endl;
}
Something()
{
cout << "클래스 생성" << endl;
}
void setValue(int value) { m_value = value; }
int getValue() const
{
return m_value;
}
};
void print(const Something &st)
{
cout << &st << endl;
cout << st.getValue() << endl;
}
int main()
{
Something something;
cout << &something << endl;
print(something);
something.setValue(4);
cout << something.getValue() << endl;
return 0;
}
const는 평소에 상수를 선언할 때 사용했습니다.
Something이라는 class를 만들고 something 인스턴스를 생성합니다.
class 앞에 const 를 붙여주면 something 인스턴스는 setValue 함수로 값을 변경할 수 없습니다.
something 인스턴스에서 getValue로 value 값을 가져오려고 해도 오류가 납니다.
컴파일러가 판단할때는 value 값이 바뀌냐 안 바뀌냐가 아닌 member function 이 const이냐 아니냐로 판단합니다.
class의 인스턴스를 const로 선언할 땐 const member function 만 사용이 가능합니다.
틈만 나면 const 를 쓰는 것이 좋습니다 논리 오류와 코딩 실수를 방지할 수 있기 때문입니다.
void print(Something st)
{
cout << &st << endl;
cout << st.getValue() << endl;
}
함수의 파라미터로 call by value 를 하게 되면 복사가 일어납니다.
최적화를 할때는 함수의 파라미터로 void print(const class_name reference 변수(&변수))
class member function을 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 << "None const version" << endl;
return m_value;
}
};
int main()
{
Something something;
something.getValue() = 10;
const Something something2;
something2.getValue();
return 0;
}
class 인스턴스를 선언할때 const로 선언된 인스턴스는 return 된 value를 수정할 수 없습니다.
보통 function 오버로딩을 할 때 파라미터로 구분 지어 오버 로딩을 했는데 const 로도 오버 로딩을 할 수 있습니다.
하지만 그렇게 자주 하는 방법은 아닙니다.
728x90
'C++ > c++ - 따라하며 배우는 c++' 카테고리의 다른 글
c++ 친구 함수와 클래스 friend (0) | 2020.10.30 |
---|---|
c++ static member function (정적 멤버 함수) (0) | 2020.10.29 |
c++ static member 변수 (0) | 2020.10.29 |
c++ 클래스 코드 와 헤더파일 (0) | 2020.10.28 |
c++ this포인터와 연쇄 호출 (0) | 2020.10.28 |
댓글
이 글 공유하기
다른 글
-
c++ static member function (정적 멤버 함수)
c++ static member function (정적 멤버 함수)
2020.10.29 -
c++ static member 변수
c++ static member 변수
2020.10.29 -
c++ 클래스 코드 와 헤더파일
c++ 클래스 코드 와 헤더파일
2020.10.28 -
c++ this포인터와 연쇄 호출
c++ this포인터와 연쇄 호출
2020.10.28