C ++ Basic模板类构造函数

时间:2015-04-21 15:05:14

标签: c++ templates constructor

我对关于BSTNode类的数据成员的对象创建感到困惑。例如,在头文件中,其中一个数据成员被定义为"密钥k"。这是否意味着已经创建了默认密钥,并且我不需要在默认的BSTNode构造函数中编写任何内容,或者我是否还需要编写密钥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
 }

1 个答案:

答案 0 :(得分:4)

你的构造函数基本上是一个无操作。

让我们通过每一行:

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 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参数版本将键和值初始化为KeyValue类型的默认初始值。