2015-07-05 41 views
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)從另一個類/結構。

回答

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構造可能也是一種選擇。

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) 
{ 
} 
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) 
}; 
相關問題