将变量作为函数c ++中的默认参数传递

时间:2014-06-18 08:32:57

标签: c++ function default-value

为什么C ++不允许这个

void insertData (T data1,Tree<T> *tree=TreeTop);

传递值作为默认参数是允许的,但为什么不将变量作为默认参数.... ??

class BinaryTree
{
    private :

    Tree<T> *TreeTop;
    unsigned int numberOfElements;

    public :
            void insertData (T data1,Tree<T> *tree=TreeTop);
            // Only Prototype For Question Purpose
    }

2 个答案:

答案 0 :(得分:0)

你可以像这样过载:

void insertData(T data1) {
    insertData(data1, TreeTop);
}

void insertData(T data1, Tree<T> *tree) {
    // Code
}

答案 1 :(得分:0)

如果你将TreeTop设为静态,这将有效:

class BinaryTree
{
    private :

    static Tree<T> *TreeTop;
    unsigned int numberOfElements;

    public :
            void insertData (T data1,Tree<T> *tree=TreeTop);

}

在这种情况下,它将是“insertData”方法调用的类级默认值。如果您想要实例级默认值,则必须执行类似

的操作
class BinaryTree
{
    private :

    Tree<T> *TreeTop;
    unsigned int numberOfElements;

    public :
            void insertData (T data1,Tree<T> *tree=NULL);

}

然后,在您的实施中,执行

public void BinaryTree::insertData(T data1, Tree<T> *tree)
{
    if (tree==null) tree=TreeTop;
    ...
}