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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
#1

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

02.01.2011, 21:41. Просмотров 1348. Ответов 19
Метки нет (Все метки)

Здравствуйте уважаемые форумчане! Прошу Вас помочь мне уяснить работу конструкторов в классах! А точнее что нужно сделать что бы конструктор позволял программисту определить реальный размер двумерного массива (допустим изначально он был 10х10) сделать его меньше!
Если это поможет то я занимаюсь по Лафоре это 10 упражнение седьмой главы стр310!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2011, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструкторы в классах (C++):

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе - C++
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих имен встречаются во всех классах, какие...

Конструкторы - C++
#include<iostream> class A { public: A(int x) : _x(x) {} private: int _x; }; int main() ...

Конструкторы - C++
class A { public: A() : a(10) // инициализация a { b = 3; // присвоение b } int a, b; };

конструкторы - C++
Доброе время суток! Помогите разобраться с конструктором. Что это такое и с чем его едят. Так как сдала лабу преподавателю, ну вроде ж...

Конструкторы - C++
Объясните на пальцах, для чего нужны конструкторы?

конструкторы - C++
Есть 2 проблемы: 1) Сказали сделать 2 конструктора: один по умолчанию, а другой-с параметрами. Какие должны быть параметры в моем...

19
silent_1991
Эксперт С++
4997 / 3055 / 149
Регистрация: 11.11.2009
Сообщений: 7,040
Завершенные тесты: 1
02.01.2011, 21:50 #2
Не совсем понятно, чего вы хотите добиться. Конструктор нужен не для того, чтобы что-то определить или что-то изменить, а чтобы инициализировать данные начальными значениями.
0
XomyaC++
7 / 7 / 1
Регистрация: 25.12.2010
Сообщений: 41
02.01.2011, 21:50 #3
Цитата Сообщение от stawerfar Посмотреть сообщение
А точнее что нужно сделать что бы конструктор позволял программисту определить реальный размер двумерного массива (допустим изначально он был 10х10) сделать его меньше!
ClassA(int i, int j); // конструктор, где i и j размерности
Уже внутри конструктора выделяем память под массив [i][j] (конечно мы помним, что нельзя сделать так mas = new int[i][j]; )
Но если нужно иметь константные размеры массива, то лучше через шаблоны
C++
1
2
3
4
template<class Ni, class Nj>
ClassA {
int mas[Ni][Nj];
};
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
02.01.2011, 21:57  [ТС] #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не совсем понятно, чего вы хотите добиться. Конструктор нужен не для того, чтобы что-то определить или что-то изменить, а чтобы инициализировать данные начальными значениями.
Дело в том что такова задача у Лафоре!Я изучил седьмую главу и после задания так вот это одно из заданий мне и самому не ясно как это вообще будет работать
0
silent_1991
Эксперт С++
4997 / 3055 / 149
Регистрация: 11.11.2009
Сообщений: 7,040
Завершенные тесты: 1
02.01.2011, 22:09 #5
Вы можете написать задание? Мне лично лень скачивать книжку ради одного задания
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
02.01.2011, 22:15  [ТС] #6
Для ясности дела вот с такой задачей я столкнулся:
Матрица это двумерный массив. Создайте класс matrix , который предоставляет меры безопасности(переполнение, обращение к существующим полям),осуществляет проверку индексов массива на вхождение их в границы массива.Полем класса matrix будет массив 10 на 10. Конструктор должен позволять программисту определить реальный размер массива(допустим ,сделать его меньше, чем 10 на 10)

Добавлено через 2 минуты
silent_1991,
Для ясности дела вот с такой задачей я столкнулся:
Матрица это двумерный массив. Создайте класс matrix , который предоставляет меры безопасности(переполнение, обращение к существующим полям),осуществляет проверку индексов массива на вхождение их в границы массива.Полем класса matrix будет массив 10 на 10. Конструктор должен позволять программисту определить реальный размер массива(допустим ,сделать его меньше, чем 10 на 10)
0
silent_1991
Эксперт С++
4997 / 3055 / 149
Регистрация: 11.11.2009
Сообщений: 7,040
Завершенные тесты: 1
02.01.2011, 22:16 #7
Ну а в чём проблема? Я бы, конечно, использовал динамику, но раз уж задание такое...
Примерно так будет выглядеть класс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Matrix
{
private:
    int _matrix[10][10];
    int _rows;
    int _cols;
 
public:
    Matrix(int rows = 2, int cols = 2):
    _rows(rows <= 10 ? rows : 10),
    _cols(cols <= 10 ? cols : 10)
    { };
    // Остальные методы
};
Реально вы будете использовать только часть массива размером _rows x _cols, остальную часть вы трогать не убдете.
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
02.01.2011, 22:25  [ТС] #8
Большое спасибо попробую с этим разобраться ! Вот толь ко не понятно почему имена начинаются со знака _ ??
0
silent_1991
Эксперт С++
4997 / 3055 / 149
Регистрация: 11.11.2009
Сообщений: 7,040
Завершенные тесты: 1
02.01.2011, 22:28 #9
Да потому что мне так захотелось))) Один из вариантов стиля программирования.
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
02.01.2011, 22:32  [ТС] #10
дело в том что Лафоре объясняет что _name большинство таких имен зарезервировано компилятором и не мудрено получить ошибку!Так как имя будет занято! НО в целом понятно!
0
silent_1991
Эксперт С++
4997 / 3055 / 149
Регистрация: 11.11.2009
Сообщений: 7,040
Завершенные тесты: 1
02.01.2011, 22:35 #11
Да, я об этом знаю. И, тем не менее, продолжаю использовать такой стиль. Пока проблем не было.
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
02.01.2011, 22:44  [ТС] #12
Спасибо! Если честно Вы используете мне пока не известные операторы! Например "?".
Matrix(int rows = 2, int cols = 2):
_rows(rows <= 10 ? rows : 10),
_cols(cols <= 10 ? cols : 10)
{ };-это конструктор ? тогда почему стоят ; здесь?
0
silent_1991
Эксперт С++
4997 / 3055 / 149
Регистрация: 11.11.2009
Сообщений: 7,040
Завершенные тесты: 1
02.01.2011, 22:51 #13
Вообще ?: - единственный тернарный оператор языка. Тернарный - значит, что он работает сразу с тремя операндами (для примера, операция сложения "+" - бинарный оператор, т.е. обрабатывается два оператора, а операция перемены знака "-" - унарный оператор (работает только с одним операндом)). Суть его следующая:

C++
1
result = bool_expr ? a : b;
Выполняется так: если условие bool_expr - истинно, то результатом всей операции станет a, в ином случае результатом будет b. В моём примере это используется так:

C++
1
rows <= 10 ? rows : 10
Если rows <= 10 (число строк меньше либо равно 10), то результатом операции станет rows (т.е. переменная _rows инициализируется значением rows <= 10), иначе результатом станет 10 (что логично, ведь массив-то у нас размером 10 х 10, а значит, если пользователь захочет создать матрицу 12 х 3 и мы не сделаем проверку на <= 10, то обязательно произойдёт выход за границы массива).

Чтобы было ещё понятнее, эквивалентом этой записи служит запись

C++
1
2
3
4
if (bool_expr)
    result = a;
else
    result = b;
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
02.01.2011, 22:53 #14
Цитата Сообщение от stawerfar Посмотреть сообщение
Спасибо! Если честно Вы используете мне пока не известные операторы! Например "?".
Это тернарный оператор. Заменяет if/else
синтаксис:
условие?true-выражение:false-выражение
C++
1
2
3
4
if(а<b)max=b;
else max=a;
//тоже самое
max=(a<b)?b:a;
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
02.01.2011, 22:56 #15
stawerfar, Что-то рано в классы полезли, раз тернарный оператор не знаете. Он ведь наравне с if/else изучается по книгам.
0
02.01.2011, 22:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2011, 22:56
Привет! Вот еще темы с ответами:

Конструкторы - C++
Есть фрагмент кода: #include &lt;iostream&gt; using namespace std; class Counter { public: Counter operator++(int);...

Конструкторы C++ - C++
Объясните, пожалуйста, своими словами, что являют собой конструкторы, для чего они нужны, в чем их преимущество перед аналогичными...

Конструкторы С++ - C++
Всем привет, помогите довести программу до ума :) Заранее благодарю откликнувшихся :) ...

Конструкторы - C++
Пытаюсь разработайте класс представления окна на экране компьютера. В состав должны войти следующие конструкторы: -конструктор по...


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

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

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