我对C++并不是很熟悉,当我尝试一些测试程序时,我想到了一个关于最好的问题,如果我可以这样说,在C++代码中定义一些原始元素.
我们来看一个描述矩形的类.它会创建它们,绘制它们,旋转它们,调整大小等等...现在在大多数情况下我们必须处理画布上的点.其自身的矩形由2个点描述:左上角和右下角.另外,为了旋转它,您需要一个角度和一个点(锚点).或者可能要移动它,您需要一个给定矩形的新锚点.我想我已经说明了使用积分.那么什么更有效?将此原始点定义为类还是结构?
class cPoint { public: int X; int Y; };
要么
typedef struct { int X; int Y; }sPoint;
John Dibling.. 14
Niether效率更高.在技术层面上,除了成员(in ,in )和默认继承模型(in ,in )的默认可见性之外,a class
和a 之间没有区别.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:
数据成员(所谓的POD)组成的简单对象.如果它有private
或者protected
数据,预期是派生自或有任何方法,则声明为a class
.
本指南可以解释,只是 - 指南.例如,没有什么可以阻止您将抽象基类声明struct
为.但是,您可能需要考虑遵循此指南,以遵循最低惊喜原则,使您的代码更易于理解和维护.