Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026

Вопрос про конструктор класса по умолчанию

29.10.2011, 18:32. Показов 7130. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
http://s2.ipicture.ru/uploads/... AtbNYV.jpg
Пункт первый не могу немного понять.Т.е получается,что всегда лучше создавать самому конструктор класса ?

Не по теме:

Ппц,как так можно книги выпускать.Сплошные опечатки,пропуски букв,не полный перевод комментариев...

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2011, 18:32
Ответы с готовыми решениями:

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Для класса не существует конструктор по умолчанию
Ошибка (активно) E0291 для класса "Apteka" не существует конструктор по умолчанию Хотел посмотреть что у меня получается, а он ошибку...

Вопрос про конструктор
цитата исходного кода из книги: class stock{ ... public: stock(); //Типа объявление конструктора по умолчанию чтоли... ...

50
Заблокирован
30.10.2011, 17:43
Студворк — интернет-сервис помощи студентам
ForEveR, я считаю, что удобство работы с классом обязан обеспечивать элегантный интерфейс класса. И уж точно, безопасность работы не должна приносится в жертву удобствами
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.10.2011, 17:47
Bers, Возможно. Я ведь просто пример привел. А в стандартных контейнерах конструкторы с этим типом аргумента безопасны.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
      vector(initializer_list<value_type> __l,
         const allocator_type& __a = allocator_type())
      : _Base(__a)
      {
    _M_range_initialize(__l.begin(), __l.end(),
                random_access_iterator_tag());
      }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Called by the second initialize_dispatch above
      template<typename _ForwardIterator>
        void
        _M_range_initialize(_ForwardIterator __first,
                _ForwardIterator __last, std::forward_iterator_tag)
        {
      const size_type __n = std::distance(__first, __last);
      this->_M_impl._M_start = this->_M_allocate(__n);
      this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
      this->_M_impl._M_finish =
        std::__uninitialized_copy_a(__first, __last,
                    this->_M_impl._M_start,
                    _M_get_Tp_allocator());
    }
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.10.2011, 17:47
Цитата Сообщение от Bers Посмотреть сообщение
Предположим, что мой вектор не умеет хранить более 4 элементов (велосипед). А я попытаюсь списками запихать в него больше. Что будит? Исключения в конструкторе вещь не хорошая...
Конкретные конструкторы позволяют построить объект конкретно безопасно. Сохраняя таким образом инвариант класса.
Любая попытка сконструировать объект с кривыми стартовыми параметрами должна пофикситься ещё на этапе компиляции, а не в рантайме...
Bers, такие случаи называются "сам дурак", алгоритмы STL тоже не застраховывают если им передать begin и end разных контейнеров
1
Заблокирован
30.10.2011, 17:51
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, Возможно. Я ведь просто пример привел. А в стандартных контейнерах конструкторы с этим типом аргумента безопасны.
Ну вот, кроме как для контейнеров, мне что-то даже в голову не приходит, как ещё можно для классов использовать списки инициализации?

Можно конечно юзать список вместо кучки однотипных аргументов, да. Но такая запись будит не очевидна (я вот так до сих пор ещё и не въехал в работу механизма)

У меня, если класс конструируется при помощи достаточно большого количества аргументов, то я просто делаю отдельную структурку с полями-аргументами, и делаю конструктор с параметром - этой структурой. Все сразу становится ясно, и понятно. Легко читается, и сопровождается.
0
Заблокирован
30.10.2011, 17:55
Цитата Сообщение от Jupiter Посмотреть сообщение
POD типами могут быть не только структуры но и классы
Да я так написал, потому что ранее этот доморощенный "эксперт" заявил, что POD - это не классы! То есть пишется всякий бред, нга который уже трудно отвечать полно, так как надо начинать с азов. Этот "эксперт" даже не знает, чем агрегат отличается от POD. Как говорится, он слышал звон, да не знает,где он. И вот такие "эксперты" вешают всякую "лапшу на уши" начинающим программистам.
0
Заблокирован
30.10.2011, 17:55
Цитата Сообщение от Jupiter Посмотреть сообщение
Bers, такие случаи называются "сам дурак"
Нет. Хороший инструмент удобно использовать "правильно", и неудобно использовать "не правильно"(ц)Роббинсон.


Цитата Сообщение от Jupiter Посмотреть сообщение
алгоритмы STL тоже не застраховывают если им передать begin и end разных контейнеров
Конечно, контейнер стл может упасть в рантайме. Но все таки, большинство глупых ошибок отлавливаются на стадии компиляции, а не в рантайме.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.10.2011, 18:00
Сыроежка,
Да я так написал, потому что ранее этот доморощенный "эксперт" заявил, что POD - это не классы!
Требую цитату, ГДЕ я это заявил.
0
Заблокирован
30.10.2011, 18:05
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка,

Требую цитату, ГДЕ я это заявил.
Ваше сообщение под номером 12

iluxa1810, Неинициализированной... Любая переменная, которая не инициализирована. У POD типов нету конструкторов, т.к. они не являются классами.

Я уже сказал вам,что сначала вам следует изучить,что такое агрегаты, и чем POD отличается от агрегатных данных.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.10.2011, 18:08
Сыроежка, Согласен. То сообщение неверно. Имелись ввиду фундаментальные типы исключительно.
0
Заблокирован
30.10.2011, 18:12
Цитата Сообщение от Сыроежка Посмотреть сообщение
POD типов нету конструкторов, т.к. они не являются классами.
Сыроежка, вы - буквоед. Конечно, формально класс тоже может быть POD-структурой, но только формально. А идеологически класс ею не является.

Чтобы структура была POD-типом, она должна удовлетворять следующим требованиям:

1. не иметь пользовательских конструкторов, деструктора или копирующего оператора присваивания;
2. не иметь базовых классов;
3. не иметь виртуальных функций;
4. не иметь защищенных (protected) или закрытых (private) нестатических членов данных;
5. не иметь не статических членов данных не-POD-типов (или массивов из таких типов), а также ссылок.


Ну так вот, исторически так сложилось, что класс и структура в с++ имеют одну природу. Но назначение у них разные.

Вот это вот структура, это не класс:
C++
1
2
3
4
5
6
7
8
9
class SCoord  //координаты
{
public:
    SCoord(int nX, int nY): x(nX),y(nY) {}
    SCoord():x(0),y(0) {}
    int x;
    int y; 
    void Clear() { x=y=0; }
};
И не нужно занудствовать, все понимают, чем настоящий класс отличается от сишной структуры.
0
Заблокирован
30.10.2011, 18:13
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Согласен. То сообщение неверно. Имелись ввиду фундаментальные типы исключительно.
Неверно еще и то, что вы почему-то выделяете POD типы, тогда как тип, не имеющий конструктора - это агрегатный тип. POD типы это более строгое понятие, на которое налагаются дополнительные по сравнению с агрегатами требования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2011, 18:13

Вопрос про конструктор
Обязательно ли делать конструктор по умолчанию для класса, экземпляр которого входит в другой класс? Например так: class Class2 ...

Cделать конструктор по умолчанию и копирования для класса
Вот у меня класс строка: class strg { char *str; int len; public: strg(); strg(const strg &amp;); }; реализация:

Вопрос про конструктор и инициализвцию
class test { int a; char name; string name2; public: test(int a,char* name, ....) : a(a), .....{} }; если стринг как...

Конструктор класса по умолчанию: код компилируется, хотя по идее не должен
#include &lt;iostream&gt; class A {}; int main() { A i; A j(i); return 0;

Для класса "R" не существует конструктор по умолчанию
Подскажите, что не так. И как здесь пользоваться cout? Чтобы вывести с. Просто я вбивал, а он не работает. И где его вообще вбивать нужно? ...


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

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru