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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.70
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
#1

Матрица, перегрузка операторов - C++

24.06.2011, 17:00. Просмотров 4304. Ответов 25
Метки нет (Все метки)

Дня доброго.
Есть такая вот задачка:
24.02.Создать класс для работы с матрицами. Предусмотреть, как минимум, функции для сложения матриц,
умножения матриц, транспонирования матриц, присваивания матриц друг другу, установка и получение
произвольного элемента матрицы. Необходимо перегрузить соответствующие операторы
есть вот такой класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
using namespace std;
class matrix
{
private:
    int x,y;
    int **m;
public:
    matrix()
    {
        **m=NULL;
        x=0;
        y=0;
    }
    matrix(int xx,int yy)
    {
        x=xx;
        y=yy;
        m=new int *[y];
        for(int i=0;i<y;i++)
            *(m+i)=new int[x];
    }
    matrix(int **q,int xx,int yy)
    {
        x=xx;
        y=yy;
        m=new int *[y];
        for(int i=0;i<y;i++)
            *(m+i)=new int[x];
        for(int i=0;i<y;i++)
            for(int j=0;j<0;j++)
                m[j][i]=q[j][i];
    }
    ~matrix()
    {
        for(int i=0;i<y;i++)
            delete []*(m+i);
        delete []m;
    }
};
int main()
{
    setlocale(LC_ALL,"Russian");
    return EXIT_SUCCESS;
}
Есть проблема: перегрузить [][].Упарился искать решение, пишут что можно сделать 2-й класс внутри первого - типа строки, и в перегрузке[] 1-го класса вызывать перегрузку [] 2-го класса.
Но как факт ни... ничего не понял.
кто сталкивался просветите, буду благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2011, 17:00     Матрица, перегрузка операторов
Посмотрите здесь:

Перегрузка операторов для класса "Матрица" - C++
Доброго времени суток. Помогите довести до ума код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;math.h&quot;...

перегрузка операторов - C++
Всем привет. Дошел до темы перегрузки операторов и возникло два вопроса. Первый: Чем отличается вот этот код String ...

Перегрузка операторов - C++
Ошибка: &quot;error: invalid operands to binary expression ('Number *' and 'Number *') n3 = n1 * n2;&quot; class Number { public: ...

Перегрузка операторов - C++
ifstream ifile(&quot;open.txt&quot;); if(! ifile) { } Как реализовать класс, что бы можно было писать: A a;

Перегрузка операторов - C++
Здравствуйте уважаемые форумчане :) У меня имеется задание написать самодельный класс строки. Если с потоковым выводом я разобрался, то с...

Перегрузка операторов - C++
Я тут пока изучаю перегрузку, написал следующий код: class String{ private: size_t size_; char* data_; public: ...

Перегрузка операторов - C++
Задание такое-Составить описание класса для представления комплексных чисел. Обеспечить выполнение операций сложения, вычитания и умножения...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 17:04     Матрица, перегрузка операторов #2
почему бы не сделать
int* operator[](index);
тогда можно будет писать mtrx[][] ты же этого хочешь?
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
24.06.2011, 17:08  [ТС]     Матрица, перегрузка операторов #3
еп.... получиццо matrix[] замениццо на адрес строки, а вторые [] станут номером элемента в строке...
гм... сча попробую
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 17:10     Матрица, перегрузка операторов #4
Цитата Сообщение от LineStown Посмотреть сообщение
**m=NULL;
интересная строка, ты зачем то обNULLяешь первый элемент своей матрицы, хотя скорее всего ты хотел занулить указатель?

конструктор копирования нужен будет
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 17:13     Матрица, перегрузка операторов #5
LineStown, я бы написал дополнительный класс Row, в котором перегрузил бы operator[]. В матрице же хранил бы массив экземпляров класса Row, а оператор [] в матрице возвращал бы один из элементов этого массива. Тогда вторая операция [] применялась бы к Row и мы получали бы определённый элемент. Да и с самой матрицей удобнее работать, когда работа со строками вынесена в отдельный класс.
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
24.06.2011, 17:16  [ТС]     Матрица, перегрузка операторов #6
Вот терь дошло) спасибо товарищи.

Добавлено через 47 секунд
1-й способ прокатил, сча с классом строк попробую
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.06.2011, 17:22     Матрица, перегрузка операторов #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
В матрице же хранил бы массив экземпляров класса Row
я бы лучше наследовал от vector<vector<type> >
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
24.06.2011, 17:24  [ТС]     Матрица, перегрузка операторов #8
Цитата Сообщение от sandye51 Посмотреть сообщение
я бы лучше наследовал от vector<vector<type> >
Можеть бы и так сделал, но про вектор ещё не разбирался)
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 17:25     Матрица, перегрузка операторов #9
да тебе бы лишь чё нибудь унаследовать, то квадрат из точки, то матрицу из стловских векторов. Это же ужас как неэффективно - каждай строка матрицы хранит свой размер и ёмкость. Зачем?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 17:27     Матрица, перегрузка операторов #10
sandye51, речь шла, как я понял, о полностью своей реализации, с использованием только сырых типов))

Не по теме:

А ведь хотел же про вектор написать после пояснения про Row, так нет же, забыл!))

LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
24.06.2011, 17:29  [ТС]     Матрица, перегрузка операторов #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
речь шла, как я понял, о полностью своей реализации, с использованием только сырых типов))
Совершенно верно, решить нужно используя только базовые типы
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 17:29     Матрица, перегрузка операторов #12
pito211, в реализации Row я бы тоже хранил размер и ёмкость, так что разницы нет. но вектор эффективен.
А про наследование речи не было, разве что про композицию
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.06.2011, 17:30     Матрица, перегрузка операторов #13
почему от stl? вектор можно и свой написать.

pito211,
наверно те, кто stl писали поумнее тебя, так что про эффективность помолчал бы.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 17:36     Матрица, перегрузка операторов #14
а чё молчать то тут налицо неэфективное использование памяти
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 18:28     Матрица, перегрузка операторов #15
pito211, в наше время критична как раз не память, а быстродействие. Стандартный вектор во втором на высоте.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 18:53     Матрица, перегрузка операторов #16
silent_1991, признавайся, ты gta4 писал?

Так писать не дело. Может быть преподу показать в универе и прокатит, а так нет. Матрица - низкоуровневое представление и не нуждается чтобы её по векторам раскладывали или ещё как то, даже если это где-то существенно упрощает реализацию. На этапе проектирования осознанно идти на дублирование информации, которой может быть кстати не мало например для матрицы 1х10000, - сдаётся мне это хреновое проектирование

Добавлено через 2 минуты
матрица так сказать опорный инструмент, ей будет пользоваться более высокоуровневый код и поэтому она должна быть максимально шустрой и не расстрачивать память по пусту
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 19:07     Матрица, перегрузка операторов #17
pito211, смотря для каких целей мы это пишем. Если я, например, хочу написать какую-нибудь систему компьютерной алгебры (где мне важен результат, а не количество съеденной памяти), я напишу класс "вектор" (не динамический массив, а алгебраический вектор), с помощью этого класса и композиции напишу класс "матрица" и т.д. Мне хочется, чтобы систему можно было легко сопровождать и модифицировать. Разбиение глобальной задачи на такие вот подзадачи позволит мне этого добиться. Если же мне нужна экономия, то я представлю матрицу двумерным массивом, напишу простенькую обёртку и (для удобства работы) перегружу оператор (), который просто будет возвращать мне соответствующий элемент по двум индексам, а не извращаться с [][].
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 19:46     Матрица, перегрузка операторов #18
матрица, состоящая от векторов, каждый из которых содержит размер, может писаться только с одной целью - отмазаться от начальства. Модифицировать и сопровождать матрицу не надо. Никто же не модифицирует стлвские вектора и листы. Это ж базовый инструмент. Он должен работать по принципу "один раз написал и забыл", и если он так не работает, значит хреново он написан

и поговорка типа "в наше время память или быстродействие не критично" для всяких там ООП-шных штучек типа полиморфизма была придумана и не служит отмазкой для такого стиля кодинга. А то потом жалуются почему у меня гта4 не идёт, да потому что так пишут, какой то программист сыкономил три минуты на матрице, а маленькому мальчику в бедной африканской стране месяц придётся голодать чтобы купить новый камень!
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 20:22     Матрица, перегрузка операторов #19
pito211, ок, спорить мне надоело. Тут и закончим. Пишите так, как удобно вам, я поступлю аналогично.

Не по теме:

И если уж на то пошло, то гта4 не из-за этого тормозит, а из-за консольности своей. Он ориентирован на многоядерность, даже двух ядер ему мало, вот и тормозит. Причины, как видите, могут быть разные, и в данном случае не память повлияла, а как раз производительность.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2011, 21:41     Матрица, перегрузка операторов
Еще ссылки по теме:

Перегрузка операторов - C++
Пытаюсь написать такой код: char* operator+(char *s1, char *s2) { return &quot;&quot;; } выдаёт ошибку: http://codepad.org/KS8qU8Ml...

Перегрузка операторов - C++
Привет, у меня есть код, но когда я его делал у меня возникла пара вопросов. #include &lt;iostream&gt; #include &lt;iomanip&gt; #include...

Перегрузка операторов - C++
Помогите решить задачу на c++ мучаюсь 3 день Перегрузить операторы «==» и «!=» для строк. Оператор «==» возвращает соответственно 1,...

Перегрузка операторов 2 - C++
Пишу класс комплексных чисел. И возникла проблема.Я перегрузил операторы +-*/. Но когда использую их в строке типа a=b+c*d - где все...

перегрузка операторов - C++
Товарисссчи, что значит запись: CVector2D::operator+(CVector2D const&amp; v1)const файл *срр и чем отличается от CVector2D const operator...


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

Или воспользуйтесь поиском по форуму:
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
24.06.2011, 21:41     Матрица, перегрузка операторов #20
может быть, хоть кто то напишет как перегрузить [][]. хотя бы прототипы. как перегрузить [] вроде понятно.
C++
1
int MyArray:: operator[] (int) const;
Yandex
Объявления
24.06.2011, 21:41     Матрица, перегрузка операторов
Ответ Создать тему
Опции темы

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