![]() |
|
Модераторы: bsa |
![]()
|
|
| Recev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Нужно создать класс в котором будут такие поля:
Динамический двумерный массив Размер массива И такие методы: Конструктор по умолчанию Конструктор с параметрами Конструктор копирования Деструктор ввода значений элементов массива Вывод массива Обработка массива: отсортировать элементы массива методом выбора. Как такое сделать? Помогите! Или хотя-бы в двух словах напишите что и как. |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
Recev, вот рыба:
Реализацией занимайтесь сами ;). Если непонятно, читайте чем отличается класс от структуры (подскажу, что по сути ни чем, кроме умалчиваемого уровня доступа), потом начальные сведения о классах, далее, что должен делать конструктор копирования -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| Recev |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Просветите как выделить память под этот массив в конструкторе по умолчанию и конструкторе копирования. Добавлено через 4 минуты и 44 секунды А также в конструкторе с параметрами. |
||||
|
|||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
Recev,
с двумерным массивом можно работать как с одномерным. Следовательно можно написать так:
Добавлено через 4 минуты и 13 секунд следовательно в конструкторе по-умолчанию можно определить какие-нибудь значение для размерности М и N. В конструкторе с параметрами эти значения брать из d_array(const int x, const int y) , а конкретней из х и у. в констуркторе копирования размерность определять по p.n, p.m, а значения брать из p.a Добавлено через 12 минут и 14 секунд p.s. Может я ошибаюсь, конечно, ведь **p - это указатель на указатель, следовательно, мы определяем его как одномерный, а потом еще инициализируем память для каждой ячейки. Честно говоря, другого способа создавать двумерные динамические массивы в памяти я не знаю. Добавлено через 12 минут и 54 секунды **p - это я в общем смысле про такое объявление -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| Recev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Вот написал какой-то бред:
Поправите плиз. |
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
какой смысл в этом?
тоже логика не ясна, без присваивания можно обойтись. и не нужно плодить лишние переменные
Да, и отформатируйте код, он нечитаем.. |
||||
|
|||||
| Чoо |
|
||||||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
зачем выделять память с параметром 0? вместо этого можно:
но тут вопрос, зачем нам тогда индесы i,j в привате? Следовательно, нужно так:
вообще все имена переменных делаем по вкусу. Далее буду писать в контексте того, как вы интерпретировали рыбу. Далее. 18 строка. В принципе не нужно объявлять переменные, которые будут только использоваться в циклах 22й и 23й строки. Вместо этого их можно определить в инструкции for:
Потом смотрим что в цикле. 25 строка: поскольку мы работаем с массивом как с одномерным, то нельзя к нему обращаться как мы это делали в статических двумерных массивах (тоесть [индексА][индексБ]). Если это сильно необходимо, то нужно перегружать оператор [][]. Возни много. Но. Даже если бы это и было возможно, то вы записываете по адресу, память по которому еще не выделена, какие-то числа. Так делать нельзя. Значит вместо [][] используем, как я писал выше
вообще мне трудно, когда имена переменных одинаковые, а отличаются только циферкой на конце Если вы вместо имен переменных на каждой интерации цикла будете подставлять фактические значения переменных, то вы поймете, что вы последовательно с [0] по [8] элементы записываете какие-то данные. Это не трудно. замечание по стилю:
мне ужасно лень считать закрывающие скобки. Используйте форматирование. Самому же проще будет ориентироваться. Так вот. Нам надо сначала выделить память, а потом уже записывать в нее какие-либо данные, итак имеем:
endl выводить не надо, так как после ввода цифры, курсор и так перейдет на новую строку. Впринципе, теперь вы должны понять, если внимательно прочли, где ошибки в printm и сможете их исправить самостоятельно. Замечание по классу: методы можно выносить за пределы объявления классов. Если их определение (реализация) большое, то логичней их вынести, что бы улучшить читаемость класса. void printm () можно вынести так:
и еще одно замечание: mass(const int x, const int y) это конструктор инициализации. он не предназначен, для вбивания данных. А предназначен для инициализации объекта данными, которые ему передают при определении объекта:
соответственно, конструктору требуется выделить 100 * 500 ячеек памяти для a.mas и запомнить эти значения. Может быть, еще понадобится заполнить эти ячейки нулями. Это по желанию. Но вбивать данные в конструкторе... нет.. Что бы забить данные, делайте еще метод add, например. Можно и в методе вбивать данные, а можно "вбитие" оставить в main, тогда нам еще понадобится хранить текущие индексы. Еще надо будет создать деструктор, что бы освободить память, но это потом. Если матеирал ООП кажется вам трудным, поищите книгу Бондарева "Самоучитель С++". Я по ней язык только третью неделю изучаю, всё толково расписано. До этого с си и с++ вообще не был знаком. Добавлено через 1 минуту и 47 секунд i,j - это приватные поля класса. В них хранится размерность массива. В конструкторе надо сохранить эти данные. Добавлено через 4 минуты и 32 секунды кстати я не случайно использовал struct, вместо class. Как я писал выше, по суте и то и то класс. Они не имеют отличий, кроме политики доступа по-умолчанию. Если уж так, сделали, и планируете работать с классом не только с использованием его методов, то надо сделать методы, которые будут возвращать размерность массива и при необходимости создавать копию самого массива. -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||||||||||||||||
|
|||||||||||||||||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
ясное дело что это, но я хотел чтоб ТС сам до этого дошел и сделал инициализацию и выделение памяти в одном конструкторе. |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
ТС старается выполнить задание, это радует
кстати вот, ради интереса набросал конструктор инициализации (просто с двумерными массивами в классах не работал, а тут захотелось попробовать), ну и для демонстрации пришлось написать метод show. Получилось неплохо, для первого раза:
По идее бы и деструктор бы нужен, но это будет уже почти решением задания Добавлено через 2 минуты и 13 секунд да и проверку бы в конструктор не мешало бы включить -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Чoо
Раз уж у нас классы, то для красоты можно было бы перегрузить операторы ввода вывода Это сообщение отредактировал(а) toxx - 5.12.2010, 01:26 |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
toxx, честно говоря, не вижу, что бы тут можно было перегрузить
-------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
operator>>, <<
|
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
toxx, ааа. Ну вообще да, но именно что только для краосты
-------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Чoо
да именно для красоты, главное правило проектирования не делать того чего не просят =) |
|||
|
||||
| Recev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Написал сортировку элементов массива методом выбора:
А как обращаться к массиву в моем случае? В классе идет mas[i1*j+j1], а я умею оперировать только с mas[i][j]. Вообщем нужно эту программу сделать методом моего класса. Добавлено через 6 минут и 10 секунд PS Алгоритм метода выбора: Находим минимальное значение (пусть это первый элемент массива), выполняем перемещение этого значения на место того значения, которое стоит на первой не отсортированной позиции. Продолжаем сортировку. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |