#include <cstdio>
// ---------------------------------------------------------> базовый класс <---
class ModelDevice
{
public:
/// Конструктор
ModelDevice ()
{
// неважно
}
/// Деструктор
virtual ~ModelDevice ()
{
// неважно
}
};
// -------------------------------------------------------------> интерфейс <---
class Angle
{
public:
/// Получить угловое положение
virtual int getAngle (float &angle) = 0;
/// Получить угловую скорость
virtual int getVelocity (float &velocity) = 0;
};
// ----------------------------------------------------> собсно, реализация <---
class ModelAngle: public ModelDevice, public Angle
{
public:
/// Код оси
enum AXIS
{
AZ, ///< азимут
EL ///< угол места
};
/// Конструктор
ModelAngle (int a) :
axis (a)
{
fprintf(stderr, "ModelAngle = %X\n", this);
}
/// Деструктор
~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);
}
I2luY2x1ZGUgPGNzdGRpbz4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiDQsdCw0LfQvtCy0YvQuSDQutC70LDRgdGBIDwtLS0KY2xhc3MgTW9kZWxEZXZpY2UKewpwdWJsaWM6CiAgICAvLy8g0JrQvtC90YHRgtGA0YPQutGC0L7RgAogICAgICAgICAgICAgICAgTW9kZWxEZXZpY2UgICAgICgpCiAgICB7CiAgICAJLy8g0L3QtdCy0LDQttC90L4KICAgIH0KICAgIC8vLyDQlNC10YHRgtGA0YPQutGC0L7RgAogICAgdmlydHVhbCAgICB+TW9kZWxEZXZpY2UgICAgICgpCiAgICB7CiAgICAJLy8g0L3QtdCy0LDQttC90L4KICAgIH0KfTsKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4g0LjQvdGC0LXRgNGE0LXQudGBIDwtLS0KY2xhc3MgQW5nbGUKewpwdWJsaWM6CiAgICAvLy8g0J/QvtC70YPRh9C40YLRjCDRg9Cz0LvQvtCy0L7QtSDQv9C+0LvQvtC20LXQvdC40LUKICAgIHZpcnR1YWwgaW50ICAgICBnZXRBbmdsZSAgICAoZmxvYXQgJmFuZ2xlKSAgICAgID0gMDsKICAgIC8vLyDQn9C+0LvRg9GH0LjRgtGMINGD0LPQu9C+0LLRg9GOINGB0LrQvtGA0L7RgdGC0YwKICAgIHZpcnR1YWwgaW50ICAgICBnZXRWZWxvY2l0eSAoZmxvYXQgJnZlbG9jaXR5KSAgID0gMDsKfTsKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4g0YHQvtCx0YHQvdC+LCDRgNC10LDQu9C40LfQsNGG0LjRjyA8LS0tCmNsYXNzIE1vZGVsQW5nbGU6IHB1YmxpYyBNb2RlbERldmljZSwgcHVibGljIEFuZ2xlCnsKcHVibGljOgoJLy8vINCa0L7QtCDQvtGB0LgKICAgIGVudW0gQVhJUwogICAgewogICAgICAgIEFaLCAgICAgLy8vPCDQsNC30LjQvNGD0YIKICAgICAgICBFTCAgICAgIC8vLzwg0YPQs9C+0Lsg0LzQtdGB0YLQsAogICAgfTsKICAgIC8vLyDQmtC+0L3RgdGC0YDRg9C60YLQvtGACiAgICBNb2RlbEFuZ2xlICAgICAgICAgIChpbnQgICAgYSkgOgogICAgCWF4aXMgICAgKGEpCiAgICB7CiAgICAJZnByaW50ZihzdGRlcnIsICJNb2RlbEFuZ2xlID0gJVhcbiIsIHRoaXMpOwogICAgfQogICAgLy8vINCU0LXRgdGC0YDRg9C60YLQvtGACiAgICB+TW9kZWxBbmdsZSAgICAgICAgICgpCiAgICB7CiAgICAJLy8g0L3RgyDRgtGD0YIg0YLQuNC/0LAg0YDQtdCw0LvQuNC30LDRhtC40Y8KICAgIH0KICAgIC8vLyDQn9C+0LvRg9GH0LjRgtGMINGD0LPQu9C+0LLQvtC1INC/0L7Qu9C+0LbQtdC90LjQtQogICAgaW50ICAgICBnZXRBbmdsZSAgICAoZmxvYXQgJmFuZ2xlKSAgICAgIG92ZXJyaWRlCiAgICB7CiAgICAJLy8g0L3RgyDRgtGD0YIg0YLQuNC/0LAg0YDQtdCw0LvQuNC30LDRhtC40Y8KICAgIH0KICAgIC8vLyDQn9C+0LvRg9GH0LjRgtGMINGD0LPQu9C+0LLRg9GOINGB0LrQvtGA0L7RgdGC0YwKICAgIGludCAgICAgZ2V0VmVsb2NpdHkgKGZsb2F0ICZ2ZWxvY2l0eSkgICBvdmVycmlkZQogICAgewogICAgCS8vINC90YMg0YLRg9GCINGC0LjQv9CwINGA0LXQsNC70LjQt9Cw0YbQuNGPCiAgICB9CnByb3RlY3RlZDoKICAgIGludCAgICAgYXhpczsKfTsKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+INC90YMg0Lgg0YfRgtC+INC2INGPINCy0LjQttGDIDwtLS0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgQW5nbGUgKmFuZ2xlID0gbmV3IE1vZGVsQW5nbGUoTW9kZWxBbmdsZTo6QVopOwogICAgZnByaW50ZihzdGRlcnIsICJhbmdsZSA9ICVYXG4iLCBhbmdsZSk7CiAgICAKICAgIGRlbGV0ZShhbmdsZSk7Cn0=