Может ли кто-нибудь помочь мне понять эти параметры / аргументы? - PullRequest
0 голосов
/ 20 июня 2020

Мне дали код для двоичного дерева поиска и поручили добавить к нему некоторые функции. Но сначала мне бы очень хотелось лучше понять определение параметров / функций для одной из данных мне функций. Код:

void printTree( ostream & out = cout ) const
{
    if( isEmpty( ) )
        out << "Empty tree" << endl;
    else
        printTree( root, out );
}
void printTree( BinaryNode *t, ostream & out ) const
{
    if( t != nullptr )
    {
        printTree( t->left, out );
        out << t->element << endl;
        printTree( t->right, out );
    }
}

Во-первых, я не понимаю, почему после круглых скобок в конце объявления функции стоит const. Еще одна вещь, которая для меня не имеет смысла, - это параметры первого объявления функции ostream & out = cout. Почему параметры = к чему-то, такого не видел. Я вообще не понимаю, на что ссылается ostream & out. Запуск printTree() без аргументов работает нормально. Почему это работает, хотя для printTree нет объявления функции без аргументов?

Кстати, это все на C ++.

1 Ответ

0 голосов
/ 20 июня 2020

const после объявления функции означает, что можно безопасно использовать эту функцию для константного объекта вашего класса. Такие функции не могут изменять какие-либо поля в вашем объекте.

ostream & out - это глобальный объект std :: cout, который управляет выводом в буфер потока определенного реализацией типа. Проще говоря, этот объект помогает вам печатать информацию в вашей консоли или файле.

ostream & out = cout означает, что cout является параметром по умолчанию, который будет передан в функцию.

Другой пример:

void printX(int x = 5)
{
    std::cout << x;
}

Если вы не предоставите этой функции какой-либо параметр, тогда она будет использовать параметр по умолчанию.

printX(10); \\ will print 10
printX(); \\ will print 5

Why does this work even though there is no function declaration for printTree with no arguments? Это потому, что эта функция будет использовать cout для распечатки вашего дерева .

I do not understand what the ostream & out is referencing in general.

Вы не можете передать функции копию cout (потому что ее конструктор копирования отключен).

...