Как вынести общие метода С++?

У меня есть классы Circle и Rectangle, они наследуются от базового класса Figure. Как мне вынести общую логику классов, что-бы код не повторялся? Данные примеры минимализированы:

Figure.h:

class Figure
{
    sf::Shape* figure_object_;
    sf::Color* color_;
public:
    virtual void show();

Circle.h:

class Circle final :
    public Figure
{
    sf::CircleShape* figure_object_;
    sf::Color* color_;
public:
    void show() override;

Circle.cpp:

void Circle::show()
{
    figure_object_->setFillColor(*color_);
}

Rectangle.h:

class Rectangle:
    public Figure
{
    sf::RectangleShape* figure_object_;
    sf::Color* color_;
public:
    void show() override;

Rectangle.cpp:

void Rectangle::show()
{
    figure_object_->setFillColor(*color_);
}

Ответы (1 шт):

Автор решения: Harry

Как минимум, не надо повторять в дочерних классах

sf::CircleShape* figure_object_;
sf::Color* color_;

color - стопроцентно, ну, а figure_object_ - если CircleShape и RectangleShape - наследники Shape с соответствующими виртуальными функциями.

Тогда

figure_object_->setFillColor(*color_);

тоже выносится в базовый класс. При этом не нужно даже перекрывать show() - виртуальность сработает сама.

class Figure
{
protected:
    sf::Shape* figure_object_;
    sf::Color* color_;
public:
    virtual void show() { figure_object_->setFillColor(*color_); }

show я оставил виртуальным на всякий пожарный случай...

Все. Главное - верно настроить в Circle и Rectangle член figure_object_.

"По-моему, так." (с) Пух

→ Ссылка