26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
||||||
1 | ||||||
перегрузка операторов11.11.2011, 01:32. Показов 7442. Ответов 38
Метки нет (Все метки)
Имеется такая программа:
Добавлено через 34 минуты Кто-нибудь знает почему так?
0
|
11.11.2011, 01:32 | |
Ответы с готовыми решениями:
38
Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this Перегрузка операторов Перегрузка операторов Перегрузка операторов |
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
|
11.11.2011, 01:51 [ТС] | 3 |
это не весь код)) код слишком большой) чтобы вас не путать) я его обрезал) переменные p и k не имеют значения(они объявлены в глобальной области) мне нужно понять почему оператор * не видит то, что было проделано в функции record1().
0
|
Заблокирован
|
|
11.11.2011, 01:59 | 4 |
Интересные люди! Выкладывают код, которые не компилируется. И говорят "а эта хрень не имеет значения". Я шо телепат что ли? Откуда я знаю, чего там и где ищё не достаёт?
Как я могу проверить работоспособность кода, если он даже не компилируется? Если у меня нет исходных данных? Вы в состоянии локализировать проблему?
0
|
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
||||||
11.11.2011, 01:59 [ТС] | 5 | |||||
вот полный код:
0
|
Заблокирован
|
|
11.11.2011, 02:06 | 6 |
Что вы имеете ввиду, называя record1() и record2() элементами?
record1() и record2() - это функции-методы. Это не элементы.Данными-членами класса являются шесть контейнеров. Оператор* работает с этими контейнерами. При чем тут record1() и record2() ? Это ваш код? Вы вообще понимаете, что этот код делает по факту, а что он должен делать по задумке?
0
|
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
|
11.11.2011, 02:12 [ТС] | 7 |
я не имел ввиду что record1 и record 2 элементы, я имел ввиду что оператор * проделывает операции с элиментам(векторами) этих функций) код работает правильно, если не использовать перегрузку операций) а просто вызывать функции по порядку)
0
|
Заблокирован
|
|
11.11.2011, 02:20 | 8 |
Я не понял, что должны делать методы record1(), record2()
Я попытался у себя скомпилировать. Я не понял, что от меня потребовалось вводить в консоль. Я нажимал первые попавшиеся цыферки, и у меня произошло рантайм-крушение. Я так и не понял, что это за класс. Какую он выполняет роль, какую решает задачу, что от него пытается добиться автор. Сам автор этого нигде ни в каких комментариях не указал. А и на вопросы внятно толком с расстановкой ответить не смог. Не зная, какую задачу выполняет класс, и не зная, как он должен её выполнять, я не могу узнать, что именно с ним не так. Предлагаю автору корректно, внятно, с толком, с расстановкой, сформулировать вопрос. А заодно, уж коли его код будут читать другие люди - снабдить его методы и алгоритмы внятными комментариями. Что бы тот, кто будит читать код, знал точно, что чего хотел добиться автор.
0
|
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
|
11.11.2011, 02:28 [ТС] | 9 |
в 1 посте в комментариях написано что делают эти функции
рантайм крушение произошло из за того что я и написал в 1 посте: когда вызывается оператор *, то он не видит то, что было проделано в функции record1(); видит только то что было в record2(); программа такова:класс перестановки,(высшая математика) класс перемножает перестановки( чего я и хотел добиться через оператор *) находит обратную(оператор ^) и находит наименьший к(тождественная перестановка)
0
|
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
|
||||||
11.11.2011, 03:44 | 10 | |||||
Это какой-то кошмар, а не класс. Зачем вам в нем столько векторов? Но попробую ответить на вопрос ТС
1)в функции main у вас написано
2) ваш оператор * вообще никак не использует свои параметры (*this и mult), а работает с каким-то локальным объектом D
1
|
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
|
11.11.2011, 04:22 [ТС] | 12 |
aeshes Спасибо что ответили на поставленный мной вопрос) столько векторов мне надо чтобы хранить данные каждой перестановки) Я плохо понимаю перегрузку операторов(точнее вообще не понимаю) не могли бы вы объяснить как мне реализовать данную перегрузку оператора *)
Bers Я уже сформулировал смысл задачи!!! я не так давно на этом форуме, но уже заметил что вы можете только критиковать и ничего не отвечать по делу! вы ради развлечений на этом форуме???
0
|
greeezz
|
11.11.2011, 04:51
#13
|
Не по теме: Smillles7, найдите книгу Дейтела "Как программировать на С++." В 11 главе (если пятое издание книги) вы найдете очень подробное и понятное описание перегрузки операторов с примерами.
1
|
Заблокирован
|
|
11.11.2011, 07:10 | 14 |
Не по теме: 1. Формулировка не понятна. Толи вы сами не понимаете, чего хотите. Толи вы не умеете грамотно выражать свои мысли так, что бы вас мог понять человек, который изначально не в теме. 2. Если речь о коде, то я всегда стараюсь говорить по делу. Именно поэтому я критикую. И очень бы хотел, что бы меня тоже так же кто нибудь критиковал. 3. Да, я здесь ради развлечения. Причем развлечение для меня - это узнавать новое о любимом с++ Я говорю вам строго по делу: нельзя решить задачу, которую не понимаешь. Написать решение задачи не сложно. Сложно понять, что вы пытаетесь решить. Если вы не сможете сформулировать задачу так, что бы другие люди вас смогли понять, они не смогут вам ничем помочь. У вас проблема в коде не с "перегрузкой оператора", а вообще с самим классом. Вы сами толком не понимаете, что он делает. И зачем. Вы не понимаете, зачем вашему классу столько векторов. Вы не понимаете, зачем внутри разных методов создаются локальные объекты, и обрабатываются их данные, вместо того, что бы обрабатывать данные члены самого класса. Зачем внутри оператора* был создан локальный объект D ? И тп.
1
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
11.11.2011, 08:59 | 15 |
Не... Задачу вы не сформулировали. Я тоже нифига не понял, для чего написан класс. Bers все правильно сказал: вы ни в одном посте не озвучили, что требуется-то ?
aeshes указала вам на очевидные ошибки. Я пытался разобраться в классе, поскольку у меня вызывает большие сомнения двойные поля. Обычно в классе поля в одном экземпляре, а тут - всего по 2. Похоже, вы не только перегрузку не понимаете, а вообще не понимаете классы. Дык сформулируйте задачу-то: что за класс, какие поля содержит, и что должна выполняет операция *. Скалярное произведение векторов? Видите, я за вас гадаю...
1
|
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
|
|
11.11.2011, 15:13 | 16 |
Smillles7, если меня не подводит память, то перестановка - это такая матрица с двумя строчками, где в первой строке - индексы i по порядку от 1 до N, а во второй строке записаны числа, соответствующие этим индексам (тоже от 1 до N, но в произвольном порядке). Например,
1 2 3 4 5 6 2 3 6 1 5 4 Так вот, тут вам нужно максимум 2 вектора, если вы хотите хранить эти наборы цифр отдельно. Поэтому и удивилась количеству векторов. Или вы под подстановкой понимаете что-то другое? И на форуме вряд ли все помнят, что такое умножение перестановок. Например, я не помню, поэтому и не могу написать, что вам переделать в операторе *, помимо отказа от локальной переменной D и использования параметров, с которыми оператор вызывается. Поэтому вопрос про постановку задачи остался открытым.
1
|
Deviaphan
|
11.11.2011, 15:26
#17
|
0
|
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 130
|
|
11.11.2011, 21:17 [ТС] | 18 |
Вы правильно поняли) 2 ыектора уходят на 1 перестановку, 2 на вторую перестановку, 1 вектор на их перемножение, 1 вектор на нахождение обратной перестановки и 3 вектор на тождественную перестановку))
Всем спасибо) сейчас буду читать книги) и попробовать сделать перегрузку, если не получиться напишу на форуме и полностью опишу программу и что она должна делать)))
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
11.11.2011, 21:21 | 19 |
Smillles7, обрати внимание на следующее: к лассе Перестановка должны быть поля ТОЛЬКО ДЛЯ ОДНОЙ перестановки. То есть массив индексов и массив чисел. Операция умножения перестановок использует 2 операнда, но эти два операнда - ДВА РАЗНЫХ ОБЪЕКТА- перестановки. Левым аргументом является текущий объект (см. this), правым - параметр операции. И еще результат - ТРЕТИЙ ОБЪЕКТ. В каждом из объектов - СОБСТВЕННЫЕ два массива. ТОЛЬКО ДВА.
0
|
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
|
|
11.11.2011, 21:23 | 20 |
Smillles7, тогда вы просто не понимаете, что такое классы. В классе Перестановка должно быть ровно 2 вектора (хотя можно и одним обойтись). А когда вы будете создавать перестановки А, В, вы должны в них заполнять эти 2 вектора - индексы и значения. Т.е., в А будет своя табличка
1 2 3 4 2 3 4 1 в В будет своя 1 2 3 4 2 1 4 3 Когда будете писать С=А*В, то в эти два вектора для объекта С запишется результат перестановки. Т.е. С будет содержать табличку 1 2 3 4 3 4 1 2 (цифры написала произвольные, потому что не помню, что такое умножение перестановок) Не надо в каждом объекте хранить векторы для всех действий над перестановками. Опоздала) ValeryLaptev уже написал
0
|
11.11.2011, 21:23 | |
11.11.2011, 21:23 | |
Помогаю со студенческими работами здесь
20
Перегрузка операторов Перегрузка операторов! перегрузка операторов Перегрузка операторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |