4x4 행렬 클래스로 예를 들면
class mat4x4
{
public:
...
double& operator() (int i, int j) { return m[i][j]; }
const double operator() (int i, int j) const { return m[i][j]; }
...
private:
...
double m[4][4];
...
};
이러면 private의 의미가 없어지는거 아님? (m[i][j] 값이 바뀌는게 다른 변수들한테 영향을 안준다는 가정하에)
사용자가 () 연산자 써서 임의로 m[i][j]를 바꿀수 있는데...
내생각엔 public 변수로 둬도 될거같은데
인터넷에서 비슷한 코드 몇개 보니 멤버변수가 private에 들어있길래 궁금해서 물어봄
흠.. 변수를 숨겨야 할 때는 private:에다가 두고 함수는 const double&을 리턴해야하고, 변수를 숨기지 않아도 될 때는 public이든 private이든 아무데나 둬도 상관없는거당가요??
이건 다만 클래스의 인스턴스명으로 접근하길 희망하는 가이드야.
~~~.m[][] 로 접근하면 구질구질하다고 생각했겠지. 그렇다고 배열 연산자를 오버로딩하자니 동적 할당이나 배열표현에서 제약이 있고
읽기 전용을 만들려는게 아니라는거.
그러니까 some_array.m[x][y] 처럼 접근하지 말고 some_array(x, y) 처럼 쓰라고 강제하는거. 그리고 함수로 싸두면 중간에 모니터링하기 좋아. 입출력을 setter getter 처럼 감시하는거지.
어떤 애들은 c 의 배열 저장순서가 세로 가로 로 row most order 인게 불편해서 저렇게 한번 가공해서 가로 세로를 뒤집어 넣기도 해.
samchon삼촌 program형 고마워~
아 저장순서는 가로 세로지 표기가 세로 가로. 말이 이상했군.
ㅋㅋ 이거 이펙c++에도 있는내용
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.