#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);
}
I2luY2x1ZGUgPGNzdGRpbz4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiDQsdCw0LfQvtCy0YvQuSDQutC70LDRgdGBIDwtLS0KY2xhc3MgTW9kZWxEZXZpY2UKewpwdWJsaWM6CiAgICAvLy8g0JrQvtC90YHRgtGA0YPQutGC0L7RgAogICAgICAgICAgIE1vZGVsRGV2aWNlICAgICAoKQogICAgewogICAgCS8vINC90LXQstCw0LbQvdC+CiAgICB9CiAgICAvLy8g0JTQtdGB0YLRgNGD0LrRgtC+0YAKICAgIHZpcnR1YWwgICAgfk1vZGVsRGV2aWNlICAgICAoKQogICAgewogICAgCS8vINC90LXQstCw0LbQvdC+CiAgICB9Cn07Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+INC40L3RgtC10YDRhNC10LnRgSA8LS0tCmNsYXNzIEFuZ2xlCnsKcHVibGljOgogICAgLy8vINCf0L7Qu9GD0YfQuNGC0Ywg0YPQs9C70L7QstC+0LUg0L/QvtC70L7QttC10L3QuNC1CiAgICB2aXJ0dWFsIGludCAgICAgZ2V0QW5nbGUgICAgKGZsb2F0ICZhbmdsZSkgICAgICA9IDA7CiAgICAvLy8g0J/QvtC70YPRh9C40YLRjCDRg9Cz0LvQvtCy0YPRjiDRgdC60L7RgNC+0YHRgtGMCiAgICB2aXJ0dWFsIGludCAgICAgZ2V0VmVsb2NpdHkgKGZsb2F0ICZ2ZWxvY2l0eSkgICA9IDA7CiAgICB2aXJ0dWFsIH5BbmdsZSgpPWRlZmF1bHQ7Cn07Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+INGB0L7QsdGB0L3Qviwg0YDQtdCw0LvQuNC30LDRhtC40Y8gPC0tLQpjbGFzcyBNb2RlbEFuZ2xlOiBwdWJsaWMgTW9kZWxEZXZpY2UsIHB1YmxpYyBBbmdsZQp7CnB1YmxpYzoKCS8vLyDQmtC+0LQg0L7RgdC4CiAgICBlbnVtIEFYSVMKICAgIHsKICAgICAgICBBWiwgICAgIC8vLzwg0LDQt9C40LzRg9GCCiAgICAgICAgRUwgICAgICAvLy88INGD0LPQvtC7INC80LXRgdGC0LAKICAgIH07CiAgICAvLy8g0JrQvtC90YHRgtGA0YPQutGC0L7RgAogICAgTW9kZWxBbmdsZSAgICAgICAgICAoaW50ICAgIGEpIDoKICAgIAlheGlzICAgIChhKQogICAgewogICAgCWZwcmludGYoc3RkZXJyLCAiTW9kZWxBbmdsZSA9ICVYXG4iLCB0aGlzKTsKICAgIH0KICAgIC8vLyDQlNC10YHRgtGA0YPQutGC0L7RgAogICAgdmlydHVhbCB+TW9kZWxBbmdsZSAgICAgICAgICgpCiAgICB7CiAgICAJLy8g0L3RgyDRgtGD0YIg0YLQuNC/0LAg0YDQtdCw0LvQuNC30LDRhtC40Y8KICAgIH0KICAgIC8vLyDQn9C+0LvRg9GH0LjRgtGMINGD0LPQu9C+0LLQvtC1INC/0L7Qu9C+0LbQtdC90LjQtQogICAgaW50ICAgICBnZXRBbmdsZSAgICAoZmxvYXQgJmFuZ2xlKSAgICAgIG92ZXJyaWRlCiAgICB7CiAgICAJLy8g0L3RgyDRgtGD0YIg0YLQuNC/0LAg0YDQtdCw0LvQuNC30LDRhtC40Y8KICAgIH0KICAgIC8vLyDQn9C+0LvRg9GH0LjRgtGMINGD0LPQu9C+0LLRg9GOINGB0LrQvtGA0L7RgdGC0YwKICAgIGludCAgICAgZ2V0VmVsb2NpdHkgKGZsb2F0ICZ2ZWxvY2l0eSkgICBvdmVycmlkZQogICAgewogICAgCS8vINC90YMg0YLRg9GCINGC0LjQv9CwINGA0LXQsNC70LjQt9Cw0YbQuNGPCiAgICB9CnByb3RlY3RlZDoKICAgIGludCAgICAgYXhpczsKfTsKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+INC90YMg0Lgg0YfRgtC+INC2INGPINCy0LjQttGDIDwtLS0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgQW5nbGUgKmFuZ2xlID0gbmV3IE1vZGVsQW5nbGUoTW9kZWxBbmdsZTo6QVopOwogICAgZnByaW50ZihzdGRlcnIsICJhbmdsZSA9ICVYXG4iLCBhbmdsZSk7CiAgICAKICAgIGRlbGV0ZShhbmdsZSk7Cn0=