0

如果我有一个二叉搜索树头文件BST.h并且在其中我有:

template <class type>
struct bstNode
{
    type info;
    bstNode * lLink;
    bstNode * rLink;
};

然后我有一个AVL.h头文件,我想bstNode在我的文件中使用这个结构,AVL.h如下所示:

template<class type>
struct avlNode
{
    bstNode<type> bstN;
    int height;

    avlNode(const type & data, bstNode<type> *ll, bstNode<type> *rl, int h = 0)
    :    //how would the initialization go here?
};

我的问题是如何avlNode使用初始化列表语法初始化构造函数?我不确定如何访问bstN.

我可以用结构外的传统定义来做到这一点:

template<class type>
avlNode<type>::avlNode(const type & data, bstNode<type> *ll, bstNode<type> * rl, int h)
{
    bstN->info = data;
    bstN->lLink = ll;
    bstN->rLink = rl;
    height = h;
}

bstN但是当涉及到使用来自另一个类/结构的对象()时,我想学习成员初始化列表的语法。

4

3 回答 3

3

您不能直接访问初始化列表中的成员。这就是为什么你会创建一个构造函数,它可以根据需要使用尽可能多的参数,并在初始化列表中将值传递给它。

例如,

template <class type>
struct bstNode
{
    type info;
    bstNode * lLink;
    bstNode * rLink;

    bstNode( const type &data, bstNode *left, bstNode *right ) :
        info( data ), bstNode( left ), bstNode( right )
    {
    }
};

然后在你的 avlNode 中调用这个构造函数。

template<class type>
avlNode<type>::avlNode(const type & data, bstNode<type> *ll, bstNode<type> * rl, int h) :
    bstN( data, ll, rl ), height( h )
{
}
于 2015-07-05T10:24:38.920 回答
2

bstNode目前是一个聚合,所以你可以直接做

template<class type>
avlNode<type>::avlNode(const type& data, bstNode<type>* ll, bstNode<type> * rl, int h) :
    bstN{data, ll, rl}, height{h}
{
}

提供bstNode构造函数也可能是一种选择。

于 2015-07-05T10:33:57.603 回答
0

你可以在 bstNode 中定义一个构造函数

 template <class type>
    struct bstNode
    {
        type info;
        bstNode * lLink;
        bstNode * rLink;
        bstNode(const type & data = type(), bstNode<type> *ll =0, bstNode<type> *rl =0):info(data),llike(ll),rlick(rl){}
    };
template<class type>
struct avlNode
{
    bstNode<type> bstN;
    int height;

    avlNode(const type & data, bstNode<type> *ll, bstNode<type> *rl, int h = 0)
    :    bstN(data,l1,rl),height(h)
};
于 2015-07-05T10:30:22.237 回答