我对 C++ 不是很熟悉,当我尝试一些测试程序时,我遇到了一个关于最好的问题,如果我可以这样说的话,可以在 C++ 代码中定义一些原始元素。
让我们来看一个描述矩形的类。它会创建它们、绘制它们、旋转、调整大小等等……现在在大多数情况下我们必须处理 Canvas 上的点。 矩形本身由 2 个点描述:左上角和右下角。 同样为了旋转它,你需要一个角度和一个点( anchor )。 或者可能要移动它,您需要给定矩形的新 anchor 。我想我使用积分表达了我的观点。 那么什么更有效率呢?将这个原始点定义为类还是结构?
class cPoint
{
public:
int X;
int Y;
};
或
typedef struct
{
int X;
int Y;
}sPoint;
最佳答案
两者都更有效率。在技术层面上,class
之间没有区别。和一个 struct
除了成员的默认可见性(public
在 struct
中,private
在 class
中)和默认继承模型(public
在 struct
中,private
在 class
中)。
他们 typedef struct {} name
模型在 C++ 中不是惯用的。事实上,这是一种令人厌恶的行为——来自 C 的遗留问题。不要使用这种模型。使用这个 struct name {};
反而。使用 typedef struct {} name;
模型在 C++ 中不会给你带来任何好处(在 C 中需要它),并且可能会在可维护性方面让你付出代价。例如,grep
可能更难对于 typedef struct
声明。但是因为这样做不会给你带来任何好处,所以没有令人信服的理由不简单地做 struct name {};
在 C++ 中。
除了技术问题,struct
之间的差异和 class
是语义的。声明为 struct
的对象是传统的和预期的s 是仅包含 public:
的简单对象数据成员(所谓的 PODs )。如果它有 private
或 protected
数据,预期派生自或具有任何方法,它被声明为 class
.
该准则可以解释,而且只是一个准则。没有什么可以阻止您将抽象基类声明为 struct
, 例如。但是,您可能需要考虑遵循此指南以遵循 Principle of Least Surprise ,使您的代码更易于理解和维护。
关于C++ typedef 结构与类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338290/