C++ 基本模板 class 构造函数
C++ Basic template class constructor
我对有关 BSTNode class 数据成员的 object 创建感到困惑。例如,在 header 文件中,其中一个数据成员定义为 "Key k"。这是否意味着默认密钥已经创建,我不需要在默认 BSTNode 构造函数中编写任何内容,或者我仍然需要编写密钥 k;在构造函数中创建默认键?当我在构造函数中传递一个 Key 以设置为 k 时,这仍然适用吗?
Class定义(在header):
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
}
您的构造函数基本上是空操作。
让我们浏览每一行:
template <class Key, class Value>
BSTNode<Key,Value>::BSTNode(){
Key k; // <--- local variable, destroyed on return
Value v; // <--- local variable, destroyed on return
BSTNode* left = NULL; // <--- local variable initialized to NULL, destroyed on return
BSTNode* right = NULL; // <--- local variable initialized to NULL, destroyed on return
}
您没有初始化 class 成员变量 -- 您所做的是创建全新的 local 变量,并将它们设置为一个值。构造函数完成后,那些局部变量将不再存在。
你要做的是:
class BSTNode {
public:
BSTNode();
BSTNode(Key theKey, Value theValue) :
Key m_key;
Value m_value;
BSTNode* m_left;
BSTNode* m_right;
};
template <class Key, class Value>
BSTNode<Key,Value>::BSTNode() :
m_key(Key()), m_value(Value()), m_left(0), m_right(0) {}
template <class Key, class Value>
BSTNode(Key theKey, Value theValue) : m_key(theKey), m_value(theValue), m_left(0), m_right(0)
{
//...
}
请注意,构造函数的 0 参数版本将键和值初始化为 Key
和 Value
类型的任何默认初始值。
我对有关 BSTNode class 数据成员的 object 创建感到困惑。例如,在 header 文件中,其中一个数据成员定义为 "Key k"。这是否意味着默认密钥已经创建,我不需要在默认 BSTNode 构造函数中编写任何内容,或者我仍然需要编写密钥 k;在构造函数中创建默认键?当我在构造函数中传递一个 Key 以设置为 k 时,这仍然适用吗?
Class定义(在header):
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
}
您的构造函数基本上是空操作。
让我们浏览每一行:
template <class Key, class Value>
BSTNode<Key,Value>::BSTNode(){
Key k; // <--- local variable, destroyed on return
Value v; // <--- local variable, destroyed on return
BSTNode* left = NULL; // <--- local variable initialized to NULL, destroyed on return
BSTNode* right = NULL; // <--- local variable initialized to NULL, destroyed on return
}
您没有初始化 class 成员变量 -- 您所做的是创建全新的 local 变量,并将它们设置为一个值。构造函数完成后,那些局部变量将不再存在。
你要做的是:
class BSTNode {
public:
BSTNode();
BSTNode(Key theKey, Value theValue) :
Key m_key;
Value m_value;
BSTNode* m_left;
BSTNode* m_right;
};
template <class Key, class Value>
BSTNode<Key,Value>::BSTNode() :
m_key(Key()), m_value(Value()), m_left(0), m_right(0) {}
template <class Key, class Value>
BSTNode(Key theKey, Value theValue) : m_key(theKey), m_value(theValue), m_left(0), m_right(0)
{
//...
}
请注意,构造函数的 0 参数版本将键和值初始化为 Key
和 Value
类型的任何默认初始值。