아래 코드는 const 와 reference 를 최대한 많이 때려박은 코드임. 최대한 때려박을수록 좋다
using namespace std;
//산술 연산자 오버로딩
class Cents
{
int m_value; // private 로 선언된 클래스 멤버변수
public:
Cents(const int& value) // 1.
{
m_value = value;
}
const int& getValue() const // 2.
{
return m_value;
}
void setValue(const int& value)
{
m_value = value;
}
/*int getValue() const
{
return m_value;
}*/
};
int add(const Cents& c1,const Cents& c2) // 2.
{
return Cents(c1.getValue() + c2.getValue()).getValue();
}
int main()
{
Cents c1(22);
Cents c2(10);
cout << add(c1, c2) << endl;
cout << add(Cents(22), Cents(10)) << endl; // 객체 생성할 메모리도 아까우니 익명클래스로
}
1. 레퍼런스로 받는이상 복사 등의 행위는 일어나지 않는다.
=> 즉 주는놈이랑 받는놈이랑 주소가 같다는 뜻이므로 무조건 변수만 넣을 수 있다.
=> 레퍼런스를 상수로 받으면 리터럴 값도 넣을 수 있다.
=> 사실
const int const& int
int int& 의차이는
call by value call by reference 의 차이점 빼고는 차이없다.
메모리를 조금이라도 아끼고자 하는 극한의 코딩을 위해서는 무조건 레퍼런스를 사용하는 것이 맞다.
고로 const & int => 요놈을 많이 쓰는것이 좋다. 왜냐? const 는 쓸수있다면 가능한 많이 사용하는 것이 나중에 좋기때
문.
2. 객체가 상수로 선언되면, 그 객체 내의 모든 값들은 못바꾼다는 의미가 된다. 즉,
그 객체 내의 함수들을 사용할거면 그 함수의 블럭들도 모두 상수처리해야 사용가능해진다.