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

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

Войти
Регистрация
Восстановить пароль
 
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
#1

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

04.02.2013, 04:04. Просмотров 477. Ответов 14
Метки нет (Все метки)

Необходимо для данного класса

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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 04:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор класса (C++):

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами - C++
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. Всем огромное спасибо за помощь! |

В конструктор класса передать объект этого класса - C++
Вопрос на засыпку :) Как в конструктор класса передать объект этого класса? Т.е. class A { public: A(const char* s){} ...

Конструктор класса с инициализацией другого класса - C++
error C2064: term does not evaluate to a function taking 6 arguments Так же при наведении на SStria(...); Пишет: call of an object of...

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

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

могу ошибаться, т.к. не эксперт, сейчас ещё подумаю... но сходу бы ответил так
0
Croessmah
Эксперт CЭксперт С++
13501 / 7659 / 865
Регистрация: 27.09.2012
Сообщений: 18,846
Записей в блоге: 3
Завершенные тесты: 1
04.02.2013, 04:20 #5
Цитата Сообщение от QWERY_2012 Посмотреть сообщение
The sequence's constructor sets used to zero
не вижу конструктора конструктор по умолчанию не будет инициализировать used нулем.
За все отвечает программист! (это не ответ)
1
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 впервые создан, ни один из массивов не используется.
0
abit
271 / 270 / 34
Регистрация: 03.02.2013
Сообщений: 754
04.02.2013, 04:34 #7
точно B отпадает
в части C... какие в ж... студенты???
D - тоже отпадает, т.к. компилятор сам может неплохо синтезировать, здесь нет конструкторов копирования и десткруторов, так что сможет...

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



всё же я проверил на более простом классе - конструктор обнулил int a[] , так что я настаиваю на варианте А )
0
Croessmah
Эксперт CЭксперт С++
13501 / 7659 / 865
Регистрация: 27.09.2012
Сообщений: 18,846
Записей в блоге: 3
Завершенные тесты: 1
04.02.2013, 04:36 #8
Цитата Сообщение от QWERY_2012 Посмотреть сообщение
Почему?
в принципе, если у нас класс последовательность, то при used равным нулю, не имеет смысла инициализировать данный массив. счет будет идти от 0 до used, поэтому инициализировать следующий элемент массива имеет смысл при вставке нового элемента, т.е. метод insert, но тут как бы говорят про весь массив в ответе B, что так же не имеет смысла. Могу предположить, что ответ E - не используемый массив нет смысла инициализировать.
1
abit
271 / 270 / 34
Регистрация: 03.02.2013
Сообщений: 754
04.02.2013, 04:40 #9
Цитата Сообщение от Croessmah Посмотреть сообщение
B
в принципе, если у нас класс последовательность, то при used равным нулю, не имеет смысла инициализировать данный массив. счет будет идти от 0 до used, поэтому инициализировать следующий элемент массива имеет смысл при вставке нового элемента, т.е. метод insert


на сколько я вижу, у него массив полностью описан в value_type data[CAPACITY];
CAPACITY - заявлена как static, значит она не входит в этот класс, а лишь в его видимости, кроме того const, значит она неизменна и массив data инициализируется конструктором (который синтезиуруется) при первом обращении к классу, а не к его методам
0
Croessmah
Эксперт CЭксперт С++
13501 / 7659 / 865
Регистрация: 27.09.2012
Сообщений: 18,846
Записей в блоге: 3
Завершенные тесты: 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 )))
1
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.02.2013, 04:46 #11
Цитата Сообщение от abit Посмотреть сообщение
всё же я проверил на более простом классе - конструктор обнулил int a[] , так что я настаиваю на варианте А )
при создании переменной в стеке, она не инициализируется 0. Конструктор по умолчанию не проинициализирует массив.
http://liveworkspace.org/code/2lMcyi$0
0
abit
271 / 270 / 34
Регистрация: 03.02.2013
Сообщений: 754
04.02.2013, 04:49 #12
Цитата Сообщение от ZoRT Посмотреть сообщение
при создании переменной в стеке, она не инициализируется 0. Конструктор по умолчанию не проинициализирует массив.
http://liveworkspace.org/code/2lMcyi$0
да, я ошибся, извиняюсь, я дейсвтительно, свой конструктор указал, просто по привычке... если вернуться к исходному коду - да, согласен инициализации data[] не произодойдет синтезированным конструктором, так что мой вариант А тоже отпал, я не о том размышлял... на массивы это не работает
0
Croessmah
Эксперт CЭксперт С++
13501 / 7659 / 865
Регистрация: 27.09.2012
Сообщений: 18,846
Записей в блоге: 3
Завершенные тесты: 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
Просмотров: 20

Размер: 4.4 Кб
1
abit
271 / 270 / 34
Регистрация: 03.02.2013
Сообщений: 754
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 не видел )))
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.02.2013, 04:53 #15
A - нет
B - нет, инициализация происходит при создании объекта, а тут про вставку, да и при вставке устанавливается значение только одного(нескольких) элементов, а не всего массива сразу
C - ? возможный вариант, вам виднее
D - нет, класс должен минимизировать ошибки, а тут если программист забудет проинициализировать... глупый вариант в общем.
E - возможно
0
04.02.2013, 04:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 04:53
Привет! Вот еще темы с ответами:

Конструктор класса - C++
Необходимо, чтобы при задании планеты (сферы) высчитывался гравитационный параметр, желательно в конструкторе. Данный код не компилируется,...

Конструктор класса - C++
Пишу конструкцию #include &lt;iostream.h&gt; #include &lt;conio.h&gt; class MyClass { int a; public: void...

Конструктор класса - C++
Интересно, а может ли быть конструктор класса не публичнымм, а приватным?

Конструктор класса - C++
задание: Класс кольцо. В классе определить поля с координатами центра кольца, большим и малыми радиусами, автовычисляемые поля с площадью и...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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