关于 C++ 模块化的最佳实践
Best practice about C++ modularity
始终将声明和定义分开是一个好习惯,即使定义只有一行,例如构造函数或下面代码中的 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);
}
}
在 class 定义中实现的所有函数都是内联的。因此,如果您将这些方法放在 class 定义中,您将使它们全部内联。这不是等效代码。
C++ 中的最佳做法是将尽可能多的定义移至 .cpp 文件,并使 .h 文件尽可能简单。减少头文件中 if #include
指令的数量。尽可能使用 classes 和结构的前向声明而不是完整定义。
唉,这些指南不适用于模板,这就是 C++ 编译如此缓慢的原因。
始终将声明和定义分开是一个好习惯,即使定义只有一行,例如构造函数或下面代码中的 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);
}
}
在 class 定义中实现的所有函数都是内联的。因此,如果您将这些方法放在 class 定义中,您将使它们全部内联。这不是等效代码。
C++ 中的最佳做法是将尽可能多的定义移至 .cpp 文件,并使 .h 文件尽可能简单。减少头文件中 if #include
指令的数量。尽可能使用 classes 和结构的前向声明而不是完整定义。
唉,这些指南不适用于模板,这就是 C++ 编译如此缓慢的原因。