我知道 C++ 中的结构和类之间几乎没有区别(两个?)。尽管如此,我被指示使用结构来定义简单的小东西,比如可能不需要成员函数的节点(尽管事实上我可以在技术上包含包含成员函数)。例如,我可以将节点定义为链表类的私有成员,如下所示:
class LinkedList {
struct Node {
MyObject *data;
Node *next;
};
Node *list;
};
但是,在这种情况下,是否可以在堆上创建此结构的新实例,还是需要定义构造函数?有没有办法在没有 new 运算符的情况下在堆上创建东西?或者,更好的是:我是否没有必要如此紧紧地坚持我不应该为结构定义成员函数的概念?我应该继续定义一个吗?或者如果我这样做了,是否就像承认 Node 真的应该是一个内部类,而不是一个内部结构?我真的应该担心这些事情吗?哪个更具可读性?
谢谢!
原文由 Ziggy 发布,翻译遵循 CC BY-SA 4.0 许可协议
如前所述,您可以通过 new 或使用 malloc 在堆上创建一个新实例。
这是更有趣的问题。 c++ 中
struct
和class
之间的主要(唯一?)区别是默认访问说明符。即struct
默认为公共访问,class
默认为私有。在我看来,这是决定您使用两者中的哪一个的差异。基本上,如果用户应该直接访问成员,那么它应该是struct
。例如,如果您没有成员函数,那么显然目的是直接访问对象的成员,因此它将是
struct
。如果一个对象只是实现其外部类的一个小型 私有 助手,如您的示例所示,那么即使它具有成员函数,通常最清楚的是允许外部类访问其成员,因此它应该是struct
。通常对于这些类,外部类的实现与内部类的实现紧密耦合,因此没有理由将一个隐藏起来。因此,对于琐碎(例如 std::pair)对象或使用受限的对象(如在私有内部类中)默认访问成员可能是一件好事,在这些情况下,我会让它们
structs
。