Форум программистов, компьютерный форум CyberForum.ru

Задать аргументу значение по умолчанию - C++

Восстановить пароль Регистрация
 
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
10.09.2011, 21:33     Задать аргументу значение по умолчанию #1
Идея такова: есть у меня однонаправленный линейный список и конструктор для инициализации его значений:
C++
1
2
3
4
5
6
7
8
9
10
11
        ListItem(string &f,int y, int a, string &g)
        {
            //различные данные узла списка
            setFullname(f);
            setYear(y);
            setAverage(a);
            setGroup(g);
 
            //указатель на сл. элемент
            Next=NULL;
        }
При некоторых операциях со списком мне было бы удобно чтобы при создании нового элемента списка (типа ListItem) я мог передать заодно как параметр и адрес сл. элемента в списке(Next), т.е хотелось бы вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
        ListItem(string &f,int y, int a, string &g,ListItem &NextPtr=0 )
        {
            //различные данные узла списка
            setFullname(f);
            setYear(y);
            setAverage(a);
            setGroup(g);
 
            //указатель на сл. элемент
            Next=NextPtr;
        }
Но компилятор говорит что мол нельзя значениям получаемым по ссылке задавать стандартные значения и какая-то доля правды в этом есть ... тем не менее хотелось бы мне это реализовать (ну вот хочется и всё тут), есть у кого идеи или может кто сталкивался с таким? Делать вызовы всюду указывая последним аргументом NULL там где нет адреса для сл. элемента в списке ,при этом в моём конструкторе никак не инициализировать по умолчанию NextPtr, - не вариант, читабельность кода сильно пострадает (да и быдлокодом будет попахивает ). Хочу услышать ваши идеи

Добавлено через 29 минут
Идея не обязательно состоит в том как заставить компилятор сьесть такой код, идея в передаче не обязательным аргументом адреса сл. указателю, который должен быть равным 0 если он не передаётся ... хотя тут наверное так не получиться сделать как мне кажется. Но мало ли, может у кого есть безумная идея.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 21:33     Задать аргументу значение по умолчанию
Посмотрите здесь:

C++ Значение вектора по-умолчанию
C++ Как в CEdit задать текст по умолчанию?
Значение по-умолчанию для ссылки C++
Ошибка: отсутствует значение, используемое по умолчанию C++
C++ функция возвращающая аргументу его значение сама по себе
Значение по умолчанию C++
Значение по умолчанию передаваемое в функцию C++
Перегрузка функций. Значение по умолчанию C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
10.09.2011, 22:09     Задать аргументу значение по умолчанию #2
В данном случае надо пользоваться не ссылками (&), а указателями (*). Во всяком случае, Next должен быть именно указателем. Если же есть желание передавать следующий элемент именно по ссылке (тогда в конструкторе придётся писать
C++
1
Next = &NextPtr;
), то проще всего воспользоваться перегрузкой: использовать оба конструктора, приведённых в тексте и не задавать NextPtr значения по умолчанию. Тогда если не указывать следующий элемент, вызовется первый конструктор, а если указывать - второй.
Тем не менее, проще всего воспользоваться вариантом с указателем и единственным конструктором:
C++
1
2
3
4
5
6
7
8
9
10
11
 ListItem::ListItem(string &f,int y, int a, string &g, ListItem* NextPtr=NULL)
                {
                        //различные данные узла списка
                        setFullname(f);
                        setYear(y);
                        setAverage(a);
                        setGroup(g);
 
                        //указатель на сл. элемент
                        Next=NextPtr;
                }
Yandex
Объявления
10.09.2011, 22:09     Задать аргументу значение по умолчанию
Ответ Создать тему
Опции темы

Текущее время: 15:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru