Deduplication

Deduplication(중복 제거)
상속과 암시적 업 캐스팅을 이용하면, 불필요한 멤버와 자유 함수의 구현을 피할 수 있다.

클래스가 슈퍼 클래스로 암시적 형변환될 때, 공통 기능을 한 번만 구현하고 모든 파생 클래스에서 공통 기능을
재사용 할 수 있게 해준다.
class base_matrix{
public:
base_matrix(size_t nr, size_t nc): nr(nr), nc(nc) {}
size_t num_rows(void) const { return nr; }
size_t num_cols(void) const { return nc; }
private:
size_t nr, nc;
};
class dense_matrix: public base_matrix{ /* ... */ };
class compressed_matrix: public base_matrix{ /* ... */ };
class banded_matrix: public base_matrix{ */ ... */ };
위에서 base_matrix 클래스를 상속한 클래스는 base_matrix의 공통되는 기능을 사용할 수 있다.
동일한 방식으로 자유 함수를 재사용 할 수도 있다.
inline size_t num_rows(const base_matrix& A){
return A.num_rows();
}
inline size_t num_colss(const base_matrix& A){
return A.num_cols();
}
inline size_t size(const base_matrix& A){
return A.num_rows()*A.num_cols;
}
위와 같은 자유 함수에 base_matrix를 상속받은 클래스가 인자로 주어지면,
암시적 업 캐스팅을 이용해, base_matrix에 구현된 함수들을 사용할 수 있다.

위와 같은 공통 기본 클래스 기능은 런타임에 비용이 거의 발생하지 않음