[모던C++입문] 2.6 멤버 변수에 접근하기
- 📕 Book/모던C++입문
- 2021. 7. 7.
2.6 멤버 변수에 접근하기
접근 함수
//게터와 세터를 도입하여 변수에 접근
complex c;
c.set_r(c.get_r() + 5);
class complex
{
public:
double& real() {return r;}
}
//레퍼런스를 반환하는 함수를 사용
c.real() += 5;
//자유함수 선언
inline double& real(complex& c) { return c.real(); }
첨자 연산자
class vector
{
public:
double at(int i)
{
assert(i >= 0 && i < my_size);
return data[i];
}
double operater[](int i) //첨자 연산자
{
assert(i >= 0 && i < my_size);
return data[i];
}
}
double sum = sum2 = 0;
for( int i = 0; i < v.size(); ++i)
{
sum += v.at(i);
sum2 += v[i];
}
//sum과 sum2의 값은 동일
상수 멤버 함수
- 상수 멤버 함수는 함수내의 불변성을 보증한다
class vector
{
public:
double& operator[](int i) const //함수 선언 뒤에 const
{
assert(i >= 0 && i < my_size);
data[i] += 1; //오류
return data[i];
}
}
레퍼런스로 한정된 멤버 (C++11)
class vector
{
public:
double& operator[](int i) { return data[i]; }
const double& operator[](int i) const { return data[i]; }
vector operator+(const vector& v2) const { return vector(size); }
private:
double* data;
int size;
};
int main()
{
vector v{ 5 }, w{ 5 };
(v + w)[3] = 7.3; //말도 안되지만 컴파일 오류가 나지 않는다.
}
class vector
{
public:
double& operator[](int i)& { return data[i]; }
const double& operator[](int i) const& { return data[i]; }
//중략
};
int main()
{
vector v{ 5 }, w{ 5 };
(v + w)[3] = 7.3; //오류: 식이 수정할수 있는 lvalue여야 합니다.
}
class my_class
{
double my_data() && {} //&&으로 함수자체를 Rvalue로 제한
}
반응형