#include <cstdio>
// ---------------------------------------------------------> базовый класс <---
class ModelDevice
{
public:
    /// Конструктор
           ModelDevice     ()
    {
    	// неважно
    }
    /// Деструктор
    virtual    ~ModelDevice     ()
    {
    	// неважно
    }
};
// -------------------------------------------------------------> интерфейс <---
class Angle
{
public:
    /// Получить угловое положение
    virtual int     getAngle    (float &angle)      = 0;
    /// Получить угловую скорость
    virtual int     getVelocity (float &velocity)   = 0;
    virtual ~Angle()=default;
};
// ----------------------------------------------------> собсно, реализация <---
class ModelAngle: public ModelDevice, public Angle
{
public:
	/// Код оси
    enum AXIS
    {
        AZ,     ///< азимут
        EL      ///< угол места
    };
    /// Конструктор
    ModelAngle          (int    a) :
    	axis    (a)
    {
    	fprintf(stderr, "ModelAngle = %X\n", this);
    }
    /// Деструктор
    virtual ~ModelAngle         ()
    {
    	// ну тут типа реализация
    }
    /// Получить угловое положение
    int     getAngle    (float &angle)      override
    {
    	// ну тут типа реализация
    }
    /// Получить угловую скорость
    int     getVelocity (float &velocity)   override
    {
    	// ну тут типа реализация
    }
protected:
    int     axis;
};
// -----------------------------------------------------> ну и что ж я вижу <---
int main(int argc, char *argv[])
{
    Angle *angle = new ModelAngle(ModelAngle::AZ);
    fprintf(stderr, "angle = %X\n", angle);
    
    delete(angle);
}