C++ typedef 结构与类

标签 c++ class struct typedef

我对 C++ 不是很熟悉,当我尝试一些测试程序时,我遇到了一个关于最好的问题,如果我可以这样说的话,可以在 C++ 代码中定义一些原始元素。

让我们来看一个描述矩形的类。它会创建它们、绘制它们、旋转、调整大小等等……现在在大多数情况下我们必须处理 Canvas 上的点。 矩形本身由 2 个点描述:左上角和右下角。 同样为了旋转它,你需要一个角度和一个点( anchor )。 或者可能要移动它,您需要给定矩形的新 anchor 。我想我使用积分表达了我的观点。 那么什么更有效率呢?将这个原始定义为类还是结构?

class cPoint
{
public: 
 int X;
 int Y;
};

typedef struct
{
 int X;
 int Y;
}sPoint;

最佳答案

两者都更有效率。在技​​术层面上,class 之间没有区别。和一个 struct除了成员的默认可见性(publicstruct 中,privateclass 中)和默认继承模型(publicstruct 中,privateclass 中)。

他们 typedef struct {} name模型在 C++ 中不是惯用的。事实上,这是一种令人厌恶的行为——来自 C 的遗留问题。不要使用这种模型。使用这个 struct name {};反而。使用 typedef struct {} name;模型在 C++ 中不会给你带来任何好处(在 C 中需要它),并且可能会在可维护性方面让你付出代价。例如,grep 可能更难对于 typedef struct声明。但是因为这样做不会给你带来任何好处,所以没有令人信服的理由不简单地做 struct name {};在 C++ 中。

除了技术问题,struct 之间的差异和 class语义的。声明为 struct 的对象是传统的和预期的s 是仅包含 public: 的简单对象数据成员(所谓的 PODs )。如果它有 privateprotected数据,预期派生自或具有任何方法,它被声明为 class .

该准则可以解释,而且只是一个准则。没有什么可以阻止您将抽象基类声明为 struct , 例如。但是,您可能需要考虑遵循此指南以遵循 Principle of Least Surprise ,使您的代码更易于理解和维护。

关于C++ typedef 结构与类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338290/

相关文章:

c++ - 当元素不存在于您的类中时,您如何实现复制构造函数?

c++ - 前面带 * 且返回值无效的函数声明?

c++ - cocos2d-x 在 3d 中重复纹理

c++ - 将图像写入目录失败

Java OOP - 学习数组元素实例,用于模拟人类生活......交配和新生

Ruby Case 类检查

c# - Visual Studio express : free class diagram tool

c - 在 C99 的结构中分配指向二维空数组的指针

c++ - 如何创建/设计数据结构?

c - 函数,用于指向结构并复制其内容而无需使用memcpy