Figure 7: Two implementations for IEqEquation. Class CComponentBinary inherits both of these intermediate classes to define two separate implementations of the base interface.

class IEqEquationKirchhoff: public IEqEquation
{
public:
    virtual double CalculateValueKirchhoff() = 0;
    virtual bool DependsUponKirchhoff(IEqUnknown *pUnknown) = 0;

    double CalculateValue()
        { return CalculateValueKirchhoff(); }
    bool DependsUpon(IEqUnknown *pUnknown)
        { return DependsUponKirchhoff(pUnknown); }
};

class IEqEquationEMF: public IEqEquation
{
public:
    virtual double CalculateValueEMF() = 0;
    virtual bool DependsUponEMF(IEqUnknown *pUnknown) = 0;

    double CalculateValue()
        { return CalculateValueEMF(); }
    bool DependsUpon(IEqUnknown *pUnknown)
        { return DependsUponEMF(pUnknown); }
};

class CComponentBinary : public CComponent,
    private IEqEquationKirchhoff,
    protected IEqEquationEMF
{
public:
    CComponentBinary();
    virtual ~CComponentBinary();

    void Attach1( CVertex *pVertex );
    void Attach2( CVertex *pVertex );

    void AddToSystemPrimary( CEqSystem &rSystem );

private:
    // IEqEquationKirchhoff implementation.
    double CalculateValueKirchhoff();
    bool DependsUponKirchhoff(IEqUnknown *pUnknown);

protected:
    CLegPtr m_pLeg1;
    CLegPtr m_pLeg2;
};