Я не уверен, правильно ли сформулирован мой вопрос, но я пытаюсь понять, что это лучший способ моделировать данные, которые «накапливаются» в агрегированной переменной-члене в дереве классов в C ++. То есть каждый производный класс добавляет некоторые данные для члена, наследуя некоторые начальные данные от его родителя.
Например, скажем, у меня есть строка «description», в которой есть одно или несколько предложений, общих для всех классов в дереве, ноль или более предложений, общих для различных ветвей дерева, и ноль или более предложений, которые являются уникальными к конкретным листовым узлам.
Каков наилучший способ смоделировать это в C ++?
Наиболее очевидный способ выглядит примерно так:
#include <iostream>
#include <string>
class A {
public:
A() {
appendDesc("base description\n");
}
void printDesc (void) {
std::cout << description;
}
protected:
void appendDesc (std::string description) {
this->description.append(description);
}
private:
std::string description;
};
class B : public A {
public:
B() {
appendDesc("extra description\n");
}
};
int main(int argc, const char *argv[]) {
B b;
b.printDesc(); // prints "accumulated" description
return 0;
}
Я использую здесь строки в качестве примера, но принцип применим ко всему, что нужно «накапливать» на агрегированном члене через дерево классов.
Итак, это лучший способ иметь append()
метод в базовом классе и заставить производные классы вызывать его в своем конструкторе, или есть лучший способ? Есть ли недостатки у подхода, описанного выше?
Задача ещё не решена.