指针语法 C++
Pointer Syntax C++
关于二叉树 - 我曾看到以下代码作为问题解决方案的一部分:
struct Node
{
int key;
struct Node *left, *right;
};
我的问题是 "struct Node *left, *right" 是什么意思,因为它已定义 w/in 第一个结构节点定义的主体。另外,如果这是 C++,为什么要在这里使用 struct 而不是 class/object?
意思就是它的样子。递归声明只是意味着一个节点结构有两个指向其他节点的字段。
我读到结构和 C++ 中的 类 之间的主要区别是默认权限(结构默认都是 public)。稍微简单一些,特别是因为不太可能继承。
在 C++(尤其是 C)中,类型通常总是由它们的构造表示。
例如,
enum Foo { ... };
void doSomethingWithAFoo(enum Foo f);
struct Bar { ... };
void doSomethingWithABar(struct Bar bar);
虽然这在 C 中是必需的,但在 C++ 中不是。在 C 中,它是通过使用 typedef
.
来实现的
typedef struct { ... } Foo; // Can now be referenced with just `Foo`
但是,规范的一个特定部分声明结构类型不能在其中包含自己的实例(更具体地说,它声明类型在完全声明之前不能引用自己)。
指针形式除外。这是因为指针在编译开始时是已知大小的,而结构只有在声明后才知道。
由于 struct
s 早于 C++(仅稍早)并且自 ANSI C (C89) 及之前出现在大多数主要编译器中,因此它们也出现在 C++ 中(因为 ANSI C 可以在兼容的 C++ 编译器中优雅地编译)。
然而,C++增加了类的概念,在C中不存在。正如其他人提到的,类和结构是相似的因为他们都拥有成员。在 C++ 中,结构可以有方法,就像 类 - 显然在 C 中不是这样。
据我所知,唯一的区别是能见度; struct
默认为 public,class
默认为私有。 C没有可见性的概念。
struct Node
定义中struct Node *left, *right;
的含义是struct Node
的每个实例都包含成员(left
和right
)指向其他 struct Node
s.
程序员有责任确保,无论何时创建 struct Node
,这些成员都被适当地初始化。它们可能被设置为 NULL
(表示它们不指向任何对象)或另一个 struct Node
.
的地址
在 C++ 中,left
和 right
的初始化通常在构造函数中完成。 C 没有该功能,因此,每次某些 C 代码创建 struct Node
时,它通常必须显式初始化左右成员。
您显示的代码实际上是 C 语言,尽管它会被 C++ 编译器接受。 C++ 允许声明 struct Node *left, *right;
省略 struct
关键字。 C 没有。
在 C++ 中,struct
和 class
是同一件事 - 区别在于成员的可访问性:C++ struct
成员是 public
和 class
成员默认为 private
。 C++ struct
s(和 class
es)能够做许多其他 C struct
s 不能做的事情。
关于二叉树 - 我曾看到以下代码作为问题解决方案的一部分:
struct Node
{
int key;
struct Node *left, *right;
};
我的问题是 "struct Node *left, *right" 是什么意思,因为它已定义 w/in 第一个结构节点定义的主体。另外,如果这是 C++,为什么要在这里使用 struct 而不是 class/object?
意思就是它的样子。递归声明只是意味着一个节点结构有两个指向其他节点的字段。
我读到结构和 C++ 中的 类 之间的主要区别是默认权限(结构默认都是 public)。稍微简单一些,特别是因为不太可能继承。
在 C++(尤其是 C)中,类型通常总是由它们的构造表示。
例如,
enum Foo { ... };
void doSomethingWithAFoo(enum Foo f);
struct Bar { ... };
void doSomethingWithABar(struct Bar bar);
虽然这在 C 中是必需的,但在 C++ 中不是。在 C 中,它是通过使用 typedef
.
typedef struct { ... } Foo; // Can now be referenced with just `Foo`
但是,规范的一个特定部分声明结构类型不能在其中包含自己的实例(更具体地说,它声明类型在完全声明之前不能引用自己)。
指针形式除外。这是因为指针在编译开始时是已知大小的,而结构只有在声明后才知道。
由于 struct
s 早于 C++(仅稍早)并且自 ANSI C (C89) 及之前出现在大多数主要编译器中,因此它们也出现在 C++ 中(因为 ANSI C 可以在兼容的 C++ 编译器中优雅地编译)。
然而,C++增加了类的概念,在C中不存在。正如其他人提到的,类和结构是相似的因为他们都拥有成员。在 C++ 中,结构可以有方法,就像 类 - 显然在 C 中不是这样。
据我所知,唯一的区别是能见度; struct
默认为 public,class
默认为私有。 C没有可见性的概念。
struct Node
定义中struct Node *left, *right;
的含义是struct Node
的每个实例都包含成员(left
和right
)指向其他 struct Node
s.
程序员有责任确保,无论何时创建 struct Node
,这些成员都被适当地初始化。它们可能被设置为 NULL
(表示它们不指向任何对象)或另一个 struct Node
.
在 C++ 中,left
和 right
的初始化通常在构造函数中完成。 C 没有该功能,因此,每次某些 C 代码创建 struct Node
时,它通常必须显式初始化左右成员。
您显示的代码实际上是 C 语言,尽管它会被 C++ 编译器接受。 C++ 允许声明 struct Node *left, *right;
省略 struct
关键字。 C 没有。
在 C++ 中,struct
和 class
是同一件事 - 区别在于成员的可访问性:C++ struct
成员是 public
和 class
成员默认为 private
。 C++ struct
s(和 class
es)能够做许多其他 C struct
s 不能做的事情。