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

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

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

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

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

Класс "Матрица": конструктор, деструктор и перегрузка операторов - C++
Матрица – KMatrix Методы: конструкторы, деструктор; операции: , =, ==, !=,...

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

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

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

перегрузка операторов С++ - C++
есть программа: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Time { private: int s, min,...

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

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

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

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

Не по теме:

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

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

pito211,
наверно те, кто stl писали поумнее тебя, так что про эффективность помолчал бы.
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
24.06.2011, 17:36 #14
а чё молчать то тут налицо неэфективное использование памяти
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.06.2011, 18:28 #15
pito211, в наше время критична как раз не память, а быстродействие. Стандартный вектор во втором на высоте.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2011, 18:28
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Всем привет! Помогите разобраться с перегрузкой операторов. Хочу реализовать класс который будет представлять тип double с...

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

Перегрузка операторов - C++
Из всего начитанного я понял что, перегрузка операторов — это возможность назначать новый смысл операторам. Мы должны определить класс...

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
24.06.2011, 18:28
Ответ Создать тему
Опции темы

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