如何使用来自另一个结构的对象编写成员初始化列表

How to write member initialization list with an object from another struct

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

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

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

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;
}

但我想学习成员初始化列表的语法,当涉及到使用另一个 class/struct.

的对象 (bstN) 时

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

例如,

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 )
{
}

你可以在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)
};

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 构造函数也是一种选择。