我有以下现有类:
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;
};
如您所见,类 Gaussian 充当接口(interface)但没有任何实现。这一切正常。
现在我想创建一个“AdaptedGaussian”类,在计算似然之前,将更改提供给calculated_likelihood的数据 vector 。
一些要求:
我现在的想法是:
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);
}
}
可能有一些缺点:
我这样做是否正确?或者有没有更好的方法来实现这一点?
是否有一种很好的方法可以将每个未实现的方法标准委托(delegate)给 m_g 的同名方法?
最佳答案
看起来不错,我认为这是适配器模式的一个非常经典的实现。只是不要忘记为您的 Gaussian 类声明一个虚拟析构函数。至于缺点。
关于c++ - 在 C++ 中实现复杂的继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1031800/