Рекомендуется всегда разделять объявление и определение, даже если определение имеет единственную строку, например конструктор или int value() const;
в коде ниже?
Моя цель — изучить C ++ и, в то же время, использовать лучшие практики. Так что если есть что улучшить в этом коде, пожалуйста, сообщите мне.
//counter.h
#ifndef COUNTER_H
#define COUNTER_H
#include <QObject>class Counter : public QObject
{
Q_OBJECT
public:
Counter();
int value() const;
public slots:
void setValue(int value);
signals:
void valueChange(int newValue);
private:
int m_value;
};
#endif // COUNTER_H
—
//counter.cpp
#include "counter.h"
Counter::Counter()
{
m_value = 0;
}
int Counter::value() const
{
return m_value;
}
void Counter::setValue(int value)
{
if(value != m_value)
{
m_value = value;
emit valueChange(value);
}
}
Все функции, реализованные в определении класса, являются встроенными. Поэтому, если вы поместите эти методы в определение класса, вы сделаете их встроенными. Это не эквивалентный код.
Лучшая практика в C ++ — переместить в файл .cpp как можно больше определений и максимально упростить ваш файл .h. Уменьшите число, если #include
директивы в ваших заголовочных файлах. По возможности используйте предварительные объявления ваших классов и структур вместо полных определений.
Увы, эти рекомендации не будут работать с шаблонами, поэтому компиляция C ++ происходит так медленно.
Других решений пока нет …