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

Конструктор класса - C++

Восстановить пароль Регистрация
 
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
04.02.2013, 04:04     Конструктор класса #1
Необходимо для данного класса

C++
1
2
3
4
5
6
7
8
9
10
11
class sequence
{
public:
typedef double value_type;
typedef std::size_t size_type;
static const size_type CAPACITY = 30;
...
private:
value_type data[CAPACITY];
size_type used;
};
Ответить на вопрос:
The sequence's constructor sets used to zero, but does not place any values in the data array. Why?


A) Integer arrays are automatically initialized to zero.

B) The first activation of insert or attach initializes the entire array.

C) The array initialization was part of the project that was left to the student.

D) The programmer who uses the sequence is responsible for initializing the array.

E) When a sequence is first created, none of the array is being used.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:06     Конструктор класса #2
Если Вам не сложно, переведите на русский язык.
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.02.2013, 04:18     Конструктор класса #3
Конструктор sequence изменяет used на 0, но не помещает значения в массив. Почему?
Целочисленные массивы автоматически инициализируются 0.
Первая вставка или (прикрепление?) инициализирует весь массив
Инициализация - часть проекта, оставленная для реализации студентом
Программист, использующий sequence, отвечает за инициализацию массива
Когда sequence создается (в первый раз?), ничего из массива не используется.

как-то так, но англ. я знаю не очень)
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 04:20     Конструктор класса #4
ответ A
why?
потому что в данном классе не определён конструктор по умолчанию, соответственно компилятор синтезирует его за неумелого программиста, а там правила гласят, что он должен обнулить все элементы базовых типов (int к ним относится)

могу ошибаться, т.к. не эксперт, сейчас ещё подумаю... но сходу бы ответил так
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12080 / 6941 / 782
Регистрация: 27.09.2012
Сообщений: 17,221
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 04:20     Конструктор класса #5
Цитата Сообщение от QWERY_2012 Посмотреть сообщение
The sequence's constructor sets used to zero
не вижу конструктора конструктор по умолчанию не будет инициализировать used нулем.
За все отвечает программист! (это не ответ)
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
04.02.2013, 04:21  [ТС]     Конструктор класса #6
ОК,

Для класса
C++
1
2
3
4
5
6
7
8
9
10
11
class sequence
{
public:
typedef double value_type;
typedef std::size_t size_type;
static const size_type CAPACITY = 30;
...
private:
value_type data[CAPACITY];
size_type used;
};
Конструктор sequence (sets used to zero) назначен использовать 0б но не помещает какого либо значения в массив. Почему?

A) Массив целых автоматически инициализируется в 0,
В) Первая активация функций insert или attach инициализируется в entire массив,
С) Инициализация массива была частью проекта, оставленная для реализации студентов,
D) Программер, кто использует класс sequence отвественный за инициализацию массива,
Е) Когда класс sequence впервые создан, ни один из массивов не используется.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 04:34     Конструктор класса #7
точно B отпадает
в части C... какие в ж... студенты???
D - тоже отпадает, т.к. компилятор сам может неплохо синтезировать, здесь нет конструкторов копирования и десткруторов, так что сможет...

остались только A, C(??? что за студенты?), Е



всё же я проверил на более простом классе - конструктор обнулил int a[] , так что я настаиваю на варианте А )
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12080 / 6941 / 782
Регистрация: 27.09.2012
Сообщений: 17,221
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 04:36     Конструктор класса #8
Цитата Сообщение от QWERY_2012 Посмотреть сообщение
Почему?
в принципе, если у нас класс последовательность, то при used равным нулю, не имеет смысла инициализировать данный массив. счет будет идти от 0 до used, поэтому инициализировать следующий элемент массива имеет смысл при вставке нового элемента, т.е. метод insert, но тут как бы говорят про весь массив в ответе B, что так же не имеет смысла. Могу предположить, что ответ E - не используемый массив нет смысла инициализировать.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 04:40     Конструктор класса #9
Цитата Сообщение от Croessmah Посмотреть сообщение
B
в принципе, если у нас класс последовательность, то при used равным нулю, не имеет смысла инициализировать данный массив. счет будет идти от 0 до used, поэтому инициализировать следующий элемент массива имеет смысл при вставке нового элемента, т.е. метод insert


на сколько я вижу, у него массив полностью описан в value_type data[CAPACITY];
CAPACITY - заявлена как static, значит она не входит в этот класс, а лишь в его видимости, кроме того const, значит она неизменна и массив data инициализируется конструктором (который синтезиуруется) при первом обращении к классу, а не к его методам
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12080 / 6941 / 782
Регистрация: 27.09.2012
Сообщений: 17,221
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 04:45     Конструктор класса #10
Цитата Сообщение от abit Посмотреть сообщение
значит она неизменна и массив data идеализируется конструктором
Это приведет к потере производительности приложения =)
Конструктор по умолчанию является примитивным.
Цитата Сообщение от abit Посмотреть сообщение
на сколько я вижу, у него массив полностью описан в value_type data[CAPACITY];
И что? Массив объявлен, количество используемых элементов=used=0. Смысл массив обнулять?

Цитата Сообщение от abit Посмотреть сообщение
так что я настаиваю на варианте А )
Настаиваете? Только вот как минимум не состыкуется:

Цитата Сообщение от QWERY_2012 Посмотреть сообщение
Массив целых автоматически инициализируется в 0(хоть это и не так)
Цитата Сообщение от QWERY_2012 Посмотреть сообщение
C++
1
2
typedef double value_type;
value_type data[CAPACITY];//Массив то double )))
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.02.2013, 04:46     Конструктор класса #11
Цитата Сообщение от abit Посмотреть сообщение
всё же я проверил на более простом классе - конструктор обнулил int a[] , так что я настаиваю на варианте А )
при создании переменной в стеке, она не инициализируется 0. Конструктор по умолчанию не проинициализирует массив.
http://liveworkspace.org/code/2lMcyi$0
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 04:49     Конструктор класса #12
Цитата Сообщение от ZoRT Посмотреть сообщение
при создании переменной в стеке, она не инициализируется 0. Конструктор по умолчанию не проинициализирует массив.
http://liveworkspace.org/code/2lMcyi$0
да, я ошибся, извиняюсь, я дейсвтительно, свой конструктор указал, просто по привычке... если вернуться к исходному коду - да, согласен инициализации data[] не произодойдет синтезированным конструктором, так что мой вариант А тоже отпал, я не о том размышлял... на массивы это не работает
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12080 / 6941 / 782
Регистрация: 27.09.2012
Сообщений: 17,221
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 04:50     Конструктор класса #13
Цитата Сообщение от abit Посмотреть сообщение
всё же я проверил на более простом классе - конструктор обнулил int a[]
Да ладно? Эт на каком языке то писали?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
class sequence
{
public:
static const size_t CAPACITY = 10;
double data[CAPACITY];
};
 
int main(){
    sequence a;
    for(size_t i=0;i<sequence::CAPACITY;++i){
    std::cout<<a.data[i]<<std::endl;
    }
}
Название: Безымянный.png
Просмотров: 19

Размер: 4.4 Кб
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 04:52     Конструктор класса #14
Цитата Сообщение от Croessmah Посмотреть сообщение
Да ладно? Эт на каком языке то писали?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
class sequence
{
public:
static const size_t CAPACITY = 10;
double data[CAPACITY];
};
 
int main(){
    sequence a;
    for(size_t i=0;i<sequence::CAPACITY;++i){
    std::cout<<a.data[i]<<std::endl;
    }
}
Вложение 231670
я ещё раз приношу извинения (
я указал свой конструктор sequence() еще в самом начале эксперемента и забыл об этом...
простите, А - отпал

p.s. писал я на g++ и виндовой консоли лет 5 не видел )))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 04:53     Конструктор класса
Еще ссылки по теме:

C++ Конструктор класса
Конструктор класса C++
Конструктор класса C++
Конструктор класса C++
Конструктор класса с инициализацией другого класса C++

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

Или воспользуйтесь поиском по форуму:
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.02.2013, 04:53     Конструктор класса #15
A - нет
B - нет, инициализация происходит при создании объекта, а тут про вставку, да и при вставке устанавливается значение только одного(нескольких) элементов, а не всего массива сразу
C - ? возможный вариант, вам виднее
D - нет, класс должен минимизировать ошибки, а тут если программист забудет проинициализировать... глупый вариант в общем.
E - возможно
Yandex
Объявления
04.02.2013, 04:53     Конструктор класса
Ответ Создать тему
Опции темы

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