Как вынести общие метода С++?
У меня есть классы 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 шт):
Как минимум, не надо повторять в дочерних классах
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_.
"По-моему, так." (с) Пух