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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
iluxa1810
12 / 12 / 5
Регистрация: 03.09.2011
Сообщений: 1,022
29.10.2011, 18:32     Вопрос про конструктор класса по умолчанию #1
http://s2.ipicture.ru/uploads/20111029/A7AtbNYV.jpg
Пункт первый не могу немного понять.Т.е получается,что всегда лучше создавать самому конструктор класса ?

Не по теме:

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

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2011, 18:32     Вопрос про конструктор класса по умолчанию
Посмотрите здесь:

Вопрос про конструктор C++
Вопрос про конструктор и инициализвцию C++
Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор C++
C++ Вопрос про конструктор
C++ Конструктор производного класса требует конструктор предка
Конструктор класса не видит конструктор по умолчанию другого класса C++
C++ Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
30.10.2011, 17:43     Вопрос про конструктор класса по умолчанию #41
ForEveR, я считаю, что удобство работы с классом обязан обеспечивать элегантный интерфейс класса. И уж точно, безопасность работы не должна приносится в жертву удобствами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.10.2011, 17:47     Вопрос про конструктор класса по умолчанию #42
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());
    }
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.10.2011, 17:47     Вопрос про конструктор класса по умолчанию #43
Цитата Сообщение от Bers Посмотреть сообщение
Предположим, что мой вектор не умеет хранить более 4 элементов (велосипед). А я попытаюсь списками запихать в него больше. Что будит? Исключения в конструкторе вещь не хорошая...
Конкретные конструкторы позволяют построить объект конкретно безопасно. Сохраняя таким образом инвариант класса.
Любая попытка сконструировать объект с кривыми стартовыми параметрами должна пофикситься ещё на этапе компиляции, а не в рантайме...
Bers, такие случаи называются "сам дурак", алгоритмы STL тоже не застраховывают если им передать begin и end разных контейнеров
Bers
Заблокирован
30.10.2011, 17:51     Вопрос про конструктор класса по умолчанию #44
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, Возможно. Я ведь просто пример привел. А в стандартных контейнерах конструкторы с этим типом аргумента безопасны.
Ну вот, кроме как для контейнеров, мне что-то даже в голову не приходит, как ещё можно для классов использовать списки инициализации?

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

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


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

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

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

Я уже сказал вам,что сначала вам следует изучить,что такое агрегаты, и чем POD отличается от агрегатных данных.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.10.2011, 18:08     Вопрос про конструктор класса по умолчанию #49
Сыроежка, Согласен. То сообщение неверно. Имелись ввиду фундаментальные типы исключительно.
Bers
Заблокирован
30.10.2011, 18:12     Вопрос про конструктор класса по умолчанию #50
Цитата Сообщение от Сыроежка Посмотреть сообщение
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; }
};
И не нужно занудствовать, все понимают, чем настоящий класс отличается от сишной структуры.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 18:13     Вопрос про конструктор класса по умолчанию
Еще ссылки по теме:

C++ Конструктор по умолчанию
Конструктор класса по умолчанию: код компилируется, хотя по идее не должен C++
C++ Cделать конструктор по умолчанию и копирования для класса
C++ Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
C++ Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
30.10.2011, 18:13     Вопрос про конструктор класса по умолчанию #51
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Согласен. То сообщение неверно. Имелись ввиду фундаментальные типы исключительно.
Неверно еще и то, что вы почему-то выделяете POD типы, тогда как тип, не имеющий конструктора - это агрегатный тип. POD типы это более строгое понятие, на которое налагаются дополнительные по сравнению с агрегатами требования.
Yandex
Объявления
30.10.2011, 18:13     Вопрос про конструктор класса по умолчанию
Ответ Создать тему
Опции темы

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