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

Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа со строками, поиск нужных элементов и их вывод http://www.cyberforum.ru/cpp-beginners/thread649180.html
Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов. Вот попробовал, но не работает, и ошибки не вижу :-| int i,Length; char str,str2; cout << "Input the string: "; gets(str); /// Считывание строки Length = strlen(str); for (i=0; i<=Length; i++) {
C++ TreeView в visual c++ Здравствуйте уважаемые форумчане! Недавно начал программировать не только для процесса получения образования, но и для себя. Пишу небольшое графическое приложение в MS Visual C++ Express работающее с TreeView, которое создавало бы дерево на основе имеющегося текста. Я хочу сделать что бы программа определяла скажем до 3-х подуровней при создании в дереве. Из всех примеров я нашёл пока только... http://www.cyberforum.ru/cpp-beginners/thread649169.html
С++ Шахматная доска C++
Помогите пожалуйста с заданием. Нужно сделать шахматную доску 16*16 и пользователь должен ввести координаты звездочек которые расположатся на доске. Потом программа должна найти кратчайший путь из точки 16*16 в точку 1*1. Нужно обходить звездочки. По диагонали передвигаться нельзя. Я сделал доску, ввод звезд, но не могу сделать обход звезд...
C++ Работа с БД + Поиск по БД C++
Всем привет форумчане! Звучит так "Система учета успеваемости студентов" Тобишь к программе прилагается БД любая хоть MySQL. Что делает программа? Обычный пользователь может вбить туда студента ФИО, Группа в кот. учица и предметы с оценками и + поиск по БД. Нужна помощь, жду знатоков форума! Спасибо.
C++ Заполнение массива случайным числом http://www.cyberforum.ru/cpp-beginners/thread649112.html
Забыл указать, что нужно вещественное число А и B - правый и левый диапазоны. ar = A + rand() % (B - A + 1); А если число вещественное?
C++ Заполнение массива случайным числом Простите забыл указать. Как заполнить массив случайным вещественным. А и B - правый и левый диапазоны. ar = A + rand() % (B - A + 1); А если число вещественное? подробнее

Показать сообщение отдельно
hoggy
6438 / 2656 / 460
Регистрация: 15.11.2014
Сообщений: 5,847
Завершенные тесты: 1
01.02.2015, 01:41     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вы говорите о необходимости статических констант? А я спросил о том, зачем может понадобиться куча одинаковых по значению копий (мемберов как вы говорите).
Нет.

Если вы внимательно перечитаете, то увидете, что речь идет о не статических членах класса.

И если вы внимательно посмотрите на пример-иллюстрацию в коде
(можете запустить его на онлайн компиляторе, по ссылке, что я оставил),
то увидите пример использования именно не статических неизменяемых членов класса.

Цитата Сообщение от IGPIGP Посмотреть сообщение
о бессмысленности её инициализации литералом, а не внешним параметром.
Ложь. Изначальный тезис был:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Ведь инициализируя её литералом или другой константой Вы делаете её одинаковой для всех экземпляров.
Я привел пример использования не статического,
и неизменяемого члена класса, который инициализируется другой константой.

Инициализация неизменяемого нестатического члена класса только литералами действительно избыточна,
и не эффективна, поскольку не имеет никаких полезных свойств,
которые нельзя было бы заполучить более эффективным способом:
при помощи локальных статических объектов.

Однако, класс не контролирует источник данных для своих конструкторов.
И не может накладывать на это никаких ограничений.

Другими словами, проектируя класс вы не можете закладываться на то,
как именно будут конструировать объект, если его конструкторы - публичны.

Может быть так:
C++
1
some obj("hello");
может быть так:

C++
1
2
3
static const char* data[] = { .... };
...
some obj(data[index] );
может быть так:

C++
1
some obj( other::class_name  );
или как то ещё.

А в отсутствии ограничений само по себе рассуждение на тему:
"бессмысленности инициализации литералом, а не внешним параметром" - не имеет смысла.

Вы все равно не знаете, как именно будет делать пользователь.
А он может сделать как захочет.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Хотя нигде не говорилось иного.
Вы писали:
Цитата Сообщение от IGPIGP Посмотреть сообщение
становится угрожающе статической
Иногда лучше вообще ничего не писать, чем писать "хрень".

Цитата Сообщение от IGPIGP Посмотреть сообщение
Тут перечислены 2 случая, но не через запятую а с союзом "и":
По-моему вы мне мозги полоскаете. Нет?

Цитата Сообщение от IGPIGP Посмотреть сообщение
a) int a = 123;
Это именно инициализация, а не присвоение.

Цитата Сообщение от IGPIGP Посмотреть сообщение
оставляет только догадываться о чём он пытался спросить.
Он не знает материал, поэтому не может сформулировать точно вопрос.

По идее, находится кто нибудь, кто чисто по человечески догадывается (хотя бы примерно) о чем речь.
Ну или переспрашивает, наталкивая новичка на более корректные вопросы...

И по итогу, в ходе диалога выясняются "заблуждения" новичка,
а сам новичок ликвидирует собственное недопонимание.

В этом заключается суть "с++ раздел для новичков", разве нет?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru