다음 세 가지 디자인 패턴에 대한 stackoverflow 커뮤니티 의견을 얻고 싶습니다. 첫 번째는 구현 상속입니다. 두 번째는 인터페이스 상속이다. 세 번째는 중간 지점입니다. 내 구체적인 질문은 : 어느 것이 가장 좋습니다?구현/인터페이스 상속 디자인 질문
구현 상속 :
class Base {
X x() const = 0;
void UpdateX(A a) { y_ = g(a); }
Y y_;
}
class Derived: Base {
X x() const { return f(y_); }
}
인터페이스 상속 :
class Base {
X x() const = 0;
void UpdateX(A a) = 0;
}
class Derived: Base {
X x() const { return x_; }
void UpdateX(A a) { x_ = f(g(a)); }
X x_;
}
중간 :
class Base {
X x() const { return x_; }
void UpdateX(A a) = 0;
X x_;
}
class Derived: Base {
void UpdateX(A a) { x_ = f(g(a)); }
}
나는 많은 사람들이 구현 상속에 인터페이스 상속을 선호하는 것을 알고있다. 그러나 후자의 이점은 Base
에 대한 포인터를 사용하면 x()를 인라인 할 수 있고 x_
의 주소를 정적으로 계산할 수 있다는 것입니다.