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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
iluxa1810
12 / 12 / 5
Регистрация: 03.09.2011
Сообщений: 1,022
#1

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

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

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

Не по теме:

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

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

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

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

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

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

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

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

Конструктор по умолчанию - C++
Здравствуйте, есть такой код: explicit RFileDownloader(QObject *parent = 0); explicit RFileDownloader(const QUrl &url = QUrl(),...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
30.10.2011, 17:43     Вопрос про конструктор класса по умолчанию #41
ForEveR, я считаю, что удобство работы с классом обязан обеспечивать элегантный интерфейс класса. И уж точно, безопасность работы не должна приносится в жертву удобствами
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
Каратель
Эксперт С++
6552 / 3972 / 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
30.10.2011, 18:00     Вопрос про конструктор класса по умолчанию #47
Сыроежка,
Да я так написал, потому что ранее этот доморощенный "эксперт" заявил, что POD - это не классы!
Требую цитату, ГДЕ я это заявил.
Сыроежка
Заблокирован
30.10.2011, 18:05     Вопрос про конструктор класса по умолчанию #48
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка,

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

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

Я уже сказал вам,что сначала вам следует изучить,что такое агрегаты, и чем POD отличается от агрегатных данных.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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++
Здраститя. #include &lt;iostream&gt; using namespace std; class random { public: random(int b){a=b;} ~random(){} int...

Конструктор по умолчанию - C++
Доброе утро! При попытке доступа к данным-элементам объекта, созданного конструктором по умолчанию, программа загибается. Возникло...

Конструктор по умолчанию - C++
Всем привет! Если в классе вообще нет конструктора, чем будут инициализироваться члены класса? И в чем отличие объект() и объект...


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

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

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