상수 멤버와 this

보물창고·2022년 8월 19일
0

c++ basic 코드누리

목록 보기
32/50

상수 멤버 함수

사용법

반환형 함수명() const

의미

: 함수 내에서의 모든 데이터는 상수 취급.

사용하는 이유

: 멤버 데이터를 변경하지 않는 다는 것을 명시할 수 있음

1) 객체 내의 데이터를 변경하는 용도가 아닌 상태를 확인하는 용도, get하는 용도로 사용시
-> 코드 안정성을 가지고 옴.
--> 한 눈에 함수의 용도를 알 수 있음!

2) 상수 객체는 상수 멤버 함수만 호출할 수 있음.
: 선택이 아닌 필수다!
-> const ref 인자로 사용하는 곳에서는 반드시 상수함수를 사용해야 함.

반드시 const 선언해야 하는 함수 : 240730

: operator< , > , == 와 같은 비교 함수

  • const 객체들도 비교 연산을 할수 있다. (전문가 c++ 에 있고),
    만약에 비교 연산자 함수를 const 처리하지 않으면 const 객체들간의 비교가 불가하다.

const 객체는 어디에서 사용이 될까?

1) call by const ref 자체가 const 객체임.
-> call by ref const 객체를 이용해 함수를 사용할 때 반드시 사용해야 함!

2) 상수 객체를 따로 생성시 .

problem

  • 1번.
    : Point 클래스를 만들고, set(int, int) 함수 만들고,
    print() 함수 만들자.
    그리고 이어서 상수 객체를 만들어서 set과 print를 호출하라.
  • 2번.
    : 객체와 get 멤버 함수를 만들고, main에서 호출하라.
    void foo()를 전역 함수로 만들고, 객체를 call by ref로 보낸후,
    foo(const & obj) 함수에서 obj.print() 함수를 호출해 보아라!

  • 결과 : print를 상수취급하지 않아서 문제 발생함.

결론

1) 함수 호출시 멤버에 변경이 없을 경우, 상수 멤버로 설정하자.
2) 상수 객체는 반드시 상수 멤버 함수만 호출할 수 있음.
3) cpp와 헤더 분류시, 반드시 const를 동일하게 표기해야 함.

객체의 상태를 변경하지 않은 모든 멤버 함수는
반드시 상수 멤버 함수로 만들어야 함.

mutable 멤버 데이터

: 멤버 데이터를 mutable로 설정하면, const 함수에서도 값 변경이 가능함.

problem

: mutable 선언 후, 상수 함수에서 해당 변수를 변경해서 출력하라.
-> Point 클래스에서 print() 출력함수가 몇번 call했는지
카운팅하는 변수를 만들었음.

상수 멤버 함수 관련 정리

  1. mutable
    : 상수 멤버 함수안에서도 값 변경이 가능함.
  2. 동일한 이름의 상수 멤버 함수와 비상수 멤버 함수 오버로딩이 가능함.
  • problem
    : 상수 객체와 일반 객체를 만들고, print 함수를 비상수 ,상수 함수로 만들어서
    이를 호출하라 .
  1. 상수 멤버 함수에서의 모든 멤버 데이터는 상수성을 가짐.
  • 예제 코드
    : private 멤버의 주소를 get하는 굉장히 안좋은 코드이지만, 예시를 위해 설명함.
    -> 오류 발생함.
    :: 왜냐하면, data는 상수함수에서 상수성을 나타내기 때문에 이때 오류 해결을 위해 const int를 반환타입으로 작성해야 함.
class Test
{
	int data;
    public : 
    int * getData() const
    {
    	return &data;
    }
}
profile
🔥🔥🔥

0개의 댓글