Действительно нужно извлечь член в другой классC++

Программы на C++. Форум разработчиков
Anonymous
Действительно нужно извлечь член в другой класс

Сообщение Anonymous »

У меня есть несколько классов для рисования диаграмм

Код: Выделить всё

class ChartBase {
private:
int transparency; //chart attribute
};
class XYChart : public ChartBase{
private:
std::string xAxis;
std::string yAxis;
};
class LineChart : public XYChart
{
private:
int lineWidth;
int lineColor;
};
а затем по какой-то причине выполните рефакторинг кода и извлеките атрибут диаграммы в другие классы, и в ChartBase появится указатель на новый класс

Код: Выделить всё

class StyleBase {
private:
int transparency;
};
class XYStyle : public StyleBase {
private:
std::string xAxis;
std::string yAxis;
};
class LineStyle : public XYStyle {
private:
int lineWidth;
int lineColor;
};

class ChartBase {
protected:
std::shared_ptr style;
};
с дизайном есть некоторые проблемы
  • в производном классе, таком как LineChart, если вы хотите что-то сделать с lineWidth, Затем цвету необходимо привести указатель стиля к LineStyle для доступа к атрибуту lineWidth и lineColor.
  • каждый производный класс ChartBase в своем конструкторе создаст экземпляр StyleBase, как показано ниже.

Код: Выделить всё

class ChartBase{
public:
ChartBase() { style = new StyleBase;}
};
class XYChart : public ChartBase{
public:
XYChart() {style = new XYStyle;}
};
class LineChart : public XYChart {
public:
LineChart() { style = new LineStyle;}
};
конструктор стиля в базовом классе не нужен в случае, а в XYChart необходим, мы где-то напрямую использовали XYChart.
есть ли есть лучший дизайн? или нам не следует извлекать их из диаграммы?

Подробнее здесь: https://stackoverflow.com/questions/786 ... ther-class

Вернуться в «C++»