Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструктор по умолчанию 
V
    Опции темы
hoz
Дата 19.4.2014, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



В книге Дейтела я столкнулся с следующим:
Цитата

Два способа обеспечить класс конструктором по умолчанию.
Любой конструктор, не принимающий аргументов, называется конструктором по умолчанию. Класс получает конструктор по умолчанию в двух случаях:
   1. Для класса, который не определяет конструктора, конструктор по умолчанию неявно создаётся компилятором. Такой конструктор не инициализирует элементов данных класса, однако вызывает конструктор по умолчанию для каждого элемента, являющегося объектом другого класса. Неинициализированная переменная обычно содержит значение "мусор".
   2. Программист явным образом определяет конструктор, не принимающий аргументов. Такой конструктор будет производить инициализацию, специфицированную программистом, и вызовет конструктор по умолчанию для каждого элемента данных, являющегося объектом другого класса.

Касаемо первого пункта, я так понимаю, если не инициализировать элементы-данные класса, то они будут содержать "мусор". Т.е. даже значение "нуль" не будут иметь после объявление того или иного элемента-данных без явного присвоения значений, верно?
Касаемо второго пункта, если явно определить конструктор, но не задать канкретным значений элементам-данных,  значения данных элементов-данных (например, приватных переменных) будут содержать также "мусор"?
Строку второго пункта:
Цитата

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

Причём здесь объекты другого класса, если речь идёт о определённом  классе? Неточность перевода я так понимаю?
PM MAIL   Вверх
Gluttton
Дата 19.4.2014, 14:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата

#include <iostream>
#include <stdlib.h>

struct A
{
    double  a;
};

struct B
{
    B ()
    {
        std::cout << __FUNCTION__ << std::endl;
        b = 0.0;
    };
    double  b;
};

struct C
{
    C       ()
    {
        std::cout << __FUNCTION__ << std::endl;
    };
    A       a;
    B       b;
    double  c;
};



int main (int argc, char * argv []) {
    C c;

    std::cout << "c.a.a = " << c.a.a << std::endl;
    std::cout << "c.b.b = " << c.b.b << std::endl;
    std::cout << "c.c   = " << c.c   << std::endl;

    return EXIT_SUCCESS;
}


Цитата

$ g++ contructor.cpp -o contructor


Цитата

$ ./contructor 
B
C
c.a.a = 4.94066e-324
c.b.b = 0
c.c   = 2.07366e-317



Цитата(hoz @  19.4.2014,  13:36 Найти цитируемый пост)
Касаемо первого пункта, я так понимаю, если не инициализировать элементы-данные класса, то они будут содержать "мусор". Т.е. даже значение "нуль" не будут иметь после объявление того или иного элемента-данных без явного присвоения значений, верно?

Да.

Цитата(hoz @  19.4.2014,  13:36 Найти цитируемый пост)
Касаемо второго пункта, если явно определить конструктор, но не задать канкретным значений элементам-данных,  значения данных элементов-данных (например, приватных переменных) будут содержать также "мусор"?

Да.

Цитата(hoz @  19.4.2014,  13:36 Найти цитируемый пост)
Неточность перевода я так понимаю? 

Нет.


--------------------
Слава Україні!
PM MAIL   Вверх
hoz
Дата 19.4.2014, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



В основном всё понятно, но...
Я не совсем понял к чему Ваш код? Это ответ на какой-то из вопросов?
PM MAIL   Вверх
Gluttton
Дата 19.4.2014, 23:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата(hoz @  19.4.2014,  22:57 Найти цитируемый пост)
Я не совсем понял к чему Ваш код? Это ответ на какой-то из вопросов? 

Это попытка приллюстрировать случай, когда пользователь явно определяет конструктор по умолчанию для класса © членами которого являются как простые типы (с), так и объекты других классов (a, b). При этом пользователь в теле конструктора явно не инициализурует члены, но при этом для тех членов, которые являются объектами другого класса вызывается конструктор по умолчанию (B) - это ответ на третий вопрос. В то же время члены класса, которые являются простыми типами остались не инициализированными  (с) - это ответ на второй вопрос. И в заключении, для тех классов, для которых пользователь не определил явно конструкор по умолчанию (А) его создал компилятор, но инициализцию членов класса в нем (в конструкторе) он (компилятор) не предусмотрел - это ответ на первый вопрос.


--------------------
Слава Україні!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.