【发布时间】:2015-04-21 15:05:13
【问题描述】:
我对关于 BSTNode 类的数据成员的对象创建感到困惑。例如,在头文件中,数据成员之一被定义为“Key k”。这是否意味着已经创建了默认密钥,我不需要在默认的 BSTNode 构造函数中编写任何内容,还是我仍然需要编写 Key k;在构造函数中创建默认键?当我在构造函数中传递一个 Key 设置为 k 时,这仍然成立吗?
类定义(在标题中):
class BSTNode {
public:
BSTNode();
BSTNode(Key k, Value v);
Key k;
Value v;
BSTNode* left;
BSTNode* right;
};
这是我的尝试:
template <class Key, class Value>
BSTNode<Key,Value>::BSTNode(){
Key kk; //create th default key
k = kk; //set the BSTNode's k to the default key
Value vv; //create the default value
v = vv; //set the BSTNode's v to the default value
BSTNode* left = NULL; //set left pointer to NULL
BSTNode* right = NULL; //set right pointer to NULL
}
【问题讨论】:
-
可能
Key是非模板版本中的实际具体类。在模板化版本中,Key是传入类型的占位符名称。通常人们使用通用的T或U以避免名称与具体类型发生冲突。 -
你的构造函数没有做任何事情。最好先阅读一些C++ books。
-
@Andyg 当我编写 BST 的具体实现时,密钥只是一个 int
-
大部分(如果不是全部)问题与模板无关。在转向模板之前,也许您应该从更基本的示例开始。
-
据我所知,
BSTNode* left = NULL; //set left pointer to NULL行根本没有明显的效果。即使它是BSTNode* left = new BSTNode();,它也只是一个隐藏成员变量的局部变量。不管它是不是模板,这都是真的。
标签: c++ templates constructor