Если у меня есть заголовочный файл бинарного дерева поиска 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
) из другого класса / структуры.
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
Конструктор также может быть опцией.
Вы не можете получить доступ к членам непосредственно в списке инициализации. Вот почему вы должны создать конструктор, который принимает столько аргументов, сколько вам нужно, и передавать ему значения в списке инициализации.
Например,
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)
};