getter/setter를 구현해야 할 필요가 있다고 가정합니다. (종종 나쁜 디자인을 나타 내기 때문에 가능하면 피하려고합니다.) 다음 두 가지 유형 중 어느 것이 더 좋으며 각각의 의미는 무엇입니까?게터 메소드의 권장되는 서명은 무엇입니까?
가능성 (1) :
class Foo;
class Bar
{
public:
const Foo& getFoo() const {return foo_;}
private:
Foo foo_;
};
또는 (2) : 나는 좀 더 직관적으로 찾을 수 있기 때문에 개인적으로
class Foo;
class Bar
{
public:
void getFoo(Foo& foo) const {foo = foo_}
private:
Foo foo_;
};
, 나는 항상 첫 번째 변종 사용합니다. 두 번째 변형에서는 getFoo를 호출하기 전에 getFoo의 결과를 보유 할 Foo 객체를 생성 한 다음 getFoo를이 객체에 대한 참조로 전달해야합니다. 이 변종은 나에게 반 직관적이라고 느끼지만, 두 번째 변종을 선호하는 사람들이 있습니다. 어떤 이유로 첫 번째 것보다 두 번째 변종이 더 우수할까요?
저는 직감을 지으며 "none"이라고 말 할 것입니다. 'Foo const & getFoo() const'를 고려 했습니까? –
두 번째 버전 w.r.t의 동작을 원한다면'Foo & getFoo()'에 추가하십시오. 당신의 레퍼런스의 가변성 (기술적으로 당신의 2는'const'-conformant가 아니므로 어쨌든이 트릭을 적용해야합니다). –
나는 게터와 세터가 나쁜 디자인을 나타내는 것에 대해 혼란스런 유일한 사람입니까? – Mitch