I가 다음과 같은 기존 클래스 :C 복잡한 상속을 구현 ++
class Gaussian {
public:
virtual Vector get_mean() = 0;
virtual Matrix get_covariance() = 0;
virtual double calculate_likelihood(Vector &data) = 0;
};
class Diagonal_Gaussian : public Gaussian {
public:
virtual Vector get_mean();
virtual Matrix get_covariance();
virtual double calculate_likelihood(Vector &data);
private:
Vector m_mean;
Vector m_covariance;
};
class FullCov_Gaussian : public Gaussian {
public:
virtual Vector get_mean();
virtual Matrix get_covariance();
virtual double calculate_likelihood(Vector &data);
private:
Vector m_mean;
Matrix m_covariance;
};
보시다시피
, 인터페이스와 클래스 가우스 행위 있지만 구현이 없습니다. 이것은 모두 정상적으로 작동합니다.
이제 likelihood가 계산되기 전에 calculate_likelihood에 제공된 데이터 벡터가 변경되는 "AdaptedGaussian"클래스를 만들고 싶습니다.
일부 요구 사항 :
- 가 AdaptedGaussian는
- AdaptedGaussian는
- AdaptedGaussian가해야 가능한 모든 가우스 클래스 "의 인스턴스가 될" "포장"또는 할 수 있어야 가우스의 아이 클래스 여야합니다 이미 존재하는 가우스 Object에서 구성 할 수
내가 지금 가지고있는 생각은 다음과 같습니다
class Adapted_Gaussian : public Gaussian {
private:
Gaussian* m_g;
public:
virtual Vector get_mean() { return m_g->get_mean(); }
virtual Matrix get_covariance() { return m_g->get_covariance(); }
virtual double calculate_likelihood(Vector &data)
{
//do something with data
return g->calculate_likelihood(Vector &data);
}
}
어쩌면 몇 가지 단점이 있습니다 모든 방법
- 더미 방법은 가우스 이제까지 확장
- 하면 새 클래스로 작성이되어야한다 (그리고이 여기에 보여 주었다보다 더) 클래스를 잊어 버리면 불쾌한 버그가 나타날 수 있습니다.
올바른 방법으로이 작업을 수행하고 있습니까? 아니면 이것을 구현하는 더 좋은 방법이 있습니까?
구현되지 않은 모든 메소드를 m_g의 동일한 명명 된 메소드로 표준 위임하는 좋은 방법이 있습니까?
내가 여기에 이해가 안 무엇 : 당신이 정말로 호출 수행을 calculate_likelihood 내에서 "get_covariance"또는 그냥 버그이며 calculate_likelihood를 호출하고 싶습니까 ?? 나는 내 통계가 매우 녹슬 었음을 인정해야한다 ... – Juergen
아이, 그건 실수였다. 고마워, 나는 그것을 고쳤다. –
Btw. calculate_likelihood 정말 무효입니까 ?? 그렇게 생각하지 마라 !! – Juergen