在班级和课外定义节点
Defining a Node in a class and outside of class
header-file-1和header-file-2之间的差异如何影响程序(用C 编写(?
哪一种是编码的更好练习?
感谢您提前的回复。
header-file-1
#ifndef BST
#define BST
#include<cstdlib>
class BST{
struct Node{
DataType dataIn;
Node * rigth;
Node * left;
};
public:
BST();
~BST();
Node * insert(DataType dataIn);
Node * remove(DataType dataOut);
Node * search(DataType dataSearch);
void printTree();
private:
Node * root;
}
#endif
header-file-2
#ifndef BST
#define BST
#include<cstdlib>
struct Node{
DataType dataIn;
Node * rigth;
Node * left;
};
class BST{
public:
BST();
~BST();
Node * insert(DataType dataIn);
Node * remove(DataType dataOut);
Node * search(DataType dataSearch);
void printTree();
private:
Node * root;
}
#endif
在第一个标题struct Node
中是私人的,而在第二个标题中,它是公共顶级struct
。
这意味着第一个标题的Node
是没有用的:如果您要写下类似的内容
BST::Node *n = bst.search(nullptr, DataType());
代码不会编译:
错误:
struct BST::Node
在此上下文中是私有的
公开struct Node
可以解决此问题。这将是第二个标头的略有改进,因为它将证明Node
与BST
的亲密关系。
但是,这不是理想的,因为Node
仍暴露于BST
的外部。这是次优的,因为实施细节可见班的外部。一种更好的方法是将Node
在BST
类中私有化,并以使Node
从BST
外部访问的方式更改API。这可以通过使用BST
类的root
实例变量来实现。
如果您的程序仅使用一种树(在您的情况下:BST(,则在两种情况下都是相同的;在BST
类或外部声明并使用遏制。
-
如果您的程序处理不同种类的树,则您应该在BST之外声明它,以重新使用:
struct Node{ DataType dataIn; Node * rigth; Node * left; }; class rootedBT { public: private: Node* R; Node* L; T data; }; class fullBT { public: private: Node* R; Node* L; T data; };
-
也在标题中使用
using namespace std
确实是可怕的。 - 类的成员数据默认情况下是
private
,因此默认情况下您的class Node
是私有的,与struct
相反。
相关文章:
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 引擎节点:未定义的符号:_ZTV6Config
- 为什么T是未定义的?我正在尝试实现一个用于双链表的节点类,它不喜欢我使用友元运算符后的T
- 在语法树中的节点上定义的层次结构的表达式模板
- 在班级和课外定义节点
- 为什么将指针指向std ::设置的提取节点是未定义的行为
- 在这个节点定义中,为什么我们在结构定义之后使用"Node"?
- 使用 CDT 从头文件中获取属性定义的节点元素是什么
- yaml-cpp:创建一个未定义的节点
- 有没有办法将大小传递给节点(C++自定义数据容器)中的数组
- 如何为链接列表节点定义一个以指针为模板类型的模板类
- 带有C++插件的节点应用程序在运行时抱怨未定义的符号
- C++ 使用 std::p air 模板专用化定义树节点数据结构
- 将自定义属性分组到 Maya 中的节点
- 创建树节点时vtable的未定义引用
- 无法在自定义树中插入超过256个节点
- 错误:SList.cpp:(.text+0x69):尝试将节点插入链表头C++时未定义对"SLNode::SLNode()"的引用
- 如果对象没有默认构造函数,并且不允许在其类定义中创建一个,那么如何将对象放入节点中?
- 在Electron中使用自定义节点包
- 为图中的节点定义"visited"变量