#include
#include
class IHardware
{
public:
virtual ~IHardware() = default;
virtual uint8_t GetHardwareData() const = 0; // I would to keep it pure virtual to beiong able to mock it
// I could use: uint8_t GetHardwareData() const { return 50; } and delete Hardware implementation class
};
class ISoftwareA : public IHardware
{
public:
virtual ~ISoftwareA() = default;
virtual uint8_t GetSoftwareData() const = 0;
};
class ISoftwareB : public IHardware
{
public:
virtual ~ISoftwareB() = default;
virtual std::string GetSoftwareData() const = 0;
};
class Hardware : public IHardware // I want to keep this to let the possibility to change the hardware implementation
{
uint8_t return_value_ = 50;
public:
uint8_t GetHardwareData() const override { return return_value_; }
};
class TestA final : public ISoftwareA, public Hardware
{
public:
uint8_t GetSoftwareData() const override { return 10; };
uint8_t GetHardwareData() const override { return Hardware::GetHardwareData(); } //
Подробнее здесь: [url]https://stackoverflow.com/questions/79272740/c-using-implementation-of-parent-class[/url]
Что касается следующего кода, я бы не стал копировать так много кода или реализовывать класс интерфейса IHardware: [code]#include #include
class IHardware { public: virtual ~IHardware() = default; virtual uint8_t GetHardwareData() const = 0; // I would to keep it pure virtual to beiong able to mock it // I could use: uint8_t GetHardwareData() const { return 50; } and delete Hardware implementation class };
class ISoftwareA : public IHardware { public: virtual ~ISoftwareA() = default; virtual uint8_t GetSoftwareData() const = 0; };
class ISoftwareB : public IHardware { public: virtual ~ISoftwareB() = default; virtual std::string GetSoftwareData() const = 0; };
class Hardware : public IHardware // I want to keep this to let the possibility to change the hardware implementation { uint8_t return_value_ = 50; public: uint8_t GetHardwareData() const override { return return_value_; } };
class TestA final : public ISoftwareA, public Hardware { public: uint8_t GetSoftwareData() const override { return 10; }; uint8_t GetHardwareData() const override { return Hardware::GetHardwareData(); } //