如何使用来自另一个结构的对象编写成员初始化列表
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
构造函数也是一种选择。
如果我有一个二叉搜索树头文件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
构造函数也是一种选择。