【发布时间】:2015-10-15 02:38:43
【问题描述】:
我正在用 C++ 构建一个通用树。我简化了我的代码只是为了了解我在做什么。本质上,我想在我的每个树节点中存储一个 char 数组。我知道数组的大小,数组的大小和内容对于每个节点都是相同的。
我的问题是如何在我的树构造函数中初始化数组?示例设置:
class Tree{
public:
Tree();
private:
struct Node{
Node* lchild;
Node* mchild;
Node* rchild;
Node* parent;
char arr[5];
};
Node* root;
};
所以在我的构造函数中,我将我的根初始化为一个新节点,并将我的所有指针都初始化为 nullptr。
Tree::Tree(){
root = new Node;
root->parent = nullptr;
root->lchild = nullptr;
root->mchild = nullptr;
root->rchild = nullptr;
root->arr[0] = 'a', root->arr[1] = 'b', root->arr[2] = 'c', root->arr[3] = 'd', root->arr[4] = 'e';
}
假设我想初始化我的 char 数组以包含 'a','b','c','d','e' 有没有比手动执行更好的方法?我正在使用 VS 2012。根据我的阅读,它并不完全支持 C++11。
【问题讨论】:
-
让一个类被其他人初始化是不好的风格。相反,
Node应该有一个构造函数(或其参数的默认值),以便root = new Node;或root = new Node(args...);完成您需要的所有初始化。 -
什么反对
Tree::Tree() : arr("abcd") { ...}? -
还有:如果你使用 "arr" 作为字符串,你会忘记终止符号 - char[5] 只能保存字符串 "abcd" - 因为第 5 个字符是 \0终结者。
标签: c++ arrays constructor tree