В C++ я часто (почти всегда) сталкивается с проблемами с конструкторами; Я никогда не знаю, как использовать параметры, и в итоге я в конечном итоге использую только конструктор без параметров для каждого класса. Затем я буду использовать сеттеры после каждого определения экземпляра. Например:Правило большого пальца для перегрузок конструктора C++?
// Obviously better
Point p(5, 3);
// ...and yet I end up using this
Point p;
p.setX(5);
p.setY(3);
Причина я в конечном итоге с помощью «хуже» метод потому, что некоторые классы принимают так много параметров, и есть очень много различных возможностей costruct их, так что мои мысли получить перепутались, и я не больше знаю, что я должен делать. Вот пример недавнего класса я сделал (он использует Qt):
// implements position and pixmap (image shown when painted)
class Block : QObject {
public:
Block(const QPixmap &img = Pixmap(), QObject *parent = 0);
Block(const QPoint &pos, const QPixmap &img = Pixmap(), QObject *parent = 0);
Block(int x, int y, const QPixmap &img = Pixmap(), QObject *parent = 0);
Block(const Block &other);
};
Имея только один класс с только два атрибутов (position
и image
), я уже получить четыре конструктора принимая четыре параметра в большинстве. Кроме того, я часто вижу, что люди заменяют первый конструктор Block(QObject *parent = 0);
и Block(const QPixmap &img, QObject *parent = 0);
, и я не уверен, что это было бы хорошо.
Теперь то, что если я craete в Rectangle
класс моей, который наследуется от Block
поэтому необходимо также принимать image
и position
, как его параметры:
Rect(const QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(const QRect &rect, const QPixmap &pixmap = QPixmap(), QObject *parent = 0);
Rect(const QSize &size, const QPoint &pos = QPoint(), const QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(const QPoint &pos, const QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(int x, int y, int w = 1, int h = 1, QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(int w, int h, QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(const QPoint &pos, int w, int h, QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(int x, int y, const QSize &size, QPixmap &img = QPixmap(), QObject *parent = 0);
Rect(const Rect &rect);
Как вы видите, он начинает искать ужасно и чертовски трудно поддерживать. Только представьте Player
класс наследующий от Rect
и реализации items
, health
, mana
, damage
, armor
... Я считаю, что невозможно закодировать эти конструкторы.
Итак, теперь, когда я дал вам эту проблему, я не уверен в этом вопросе; Мне нужны какие-либо советы или рекомендации, которые помогут мне с моими конструкторами, когда использовать параметры по умолчанию и как часто мне нужны все конструкторы и да, просто некоторые советы, которые мешают мне создавать 500 конструкторов для одного класса; должен ли я просто пойти с моим оригинальным примером p.setX(5);
?
Вы создаете свои собственные классы здесь или используете классы из библиотеки? –
@MonadNewb Классы, начинающиеся с 'Q', из Qt libararies, остальные мои. –
Один из вариантов: http://en.wikipedia.org/wiki/Builder_pattern –