13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026

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

29.10.2011, 18:32. Показов 6743. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru