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

матрица. клас. 2 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 5.00
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
19.02.2012, 21:44     матрица. клас. 2 #1
в продолжение этой темы

вот заголовочный файл:
клац
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
#pragma once
 
#include <vector>
#include <iostream>
 
typedef std::vector<int>      T_vector;
typedef std::vector<T_vector> T_matrix;
///////////////////////////////////////////////////////////////////////////////
class matrix
{
public:
    matrix();
    explicit matrix(size_t size);
    //-------------------------------------------------------------------------
    matrix(const matrix& matr);
    //-------------------------------------------------------------------------
    bool      operator==   (const matrix& matr)   const;
    bool      operator!=   (const matrix& matr)   const;
    matrix&   operator=    (const matrix& matr); 
    matrix    operator+    (const matrix& matr)   const;
    matrix    operator*    (const matrix& matr)   const;
    matrix    operator-    (const matrix& matr)   const;
    matrix    operator-    ()                     const;
    matrix&   operator+=   (const matrix& matr);
    matrix&   operator-=   (const matrix& matr);
    matrix&   operator*=   (const matrix& matr);
    //-------------------------------------------------------------------------
    friend std::ostream& operator<< (std::ostream& stream, const matrix& matr);
    friend std::istream& operator>> (std::istream& stream,       matrix& matr);      
    //-------------------------------------------------------------------------
    inline size_t   size     ()           const;
    inline void     resize   (size_t n);
    //-------------------------------------------------------------------------
private:
    T_matrix _matrix;
};
///////////////////////////////////////////////////////////////////////////////

1) typedef где размещать? так или внутри класса?
2) где упущены квалификаторы const;
все ли перегруженные операторы возвращают правильные значения?
для каких случаев данный код может не работать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 21:44     матрица. клас. 2
Посмотрите здесь:

клас обработчик C++
C++ Векторы+клас
C++ матрица. клас
переделать клас C++
Клас колода карт C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2911 / 1340 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
20.02.2012, 00:19     матрица. клас. 2 #2
Цитата Сообщение от Mayonez Посмотреть сообщение
typedef где размещать? так или внутри класса?
Внутри. Описание типа строки можно сделать пабликом.

Цитата Сообщение от Mayonez Посмотреть сообщение
для каких случаев данный код может не работать?
Как обращаться к элементам матрицы?! Можно только ввести её из потока и вывести в поток?

Что делает функция resize? Какую размерность матрицы меняет? Она принимает один параметр, а у матрицы размерности две, afaik.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
20.02.2012, 11:41  [ТС]     матрица. клас. 2 #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Как обращаться к элементам матрицы?!
упс... доделаю
Цитата Сообщение от lemegeton Посмотреть сообщение
Что делает функция resize? Какую размерность матрицы меняет? Она принимает один параметр, а у матрицы размерности две, afaik.
это только квадратные матрицы
golatin
259 / 216 / 38
Регистрация: 12.10.2011
Сообщений: 311
Завершенные тесты: 1
20.02.2012, 12:58     матрица. клас. 2 #4
Ну и добавьте
1) Умножение на число
2) Транспонирование
3) Нулевая матрица
4) Единичная матрица
5) Определитель
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
21.02.2012, 19:19  [ТС]     матрица. клас. 2 #5
операторы сравнения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool matrix::operator==(const matrix& matr) const
{
    if(this->size() != matr.size())
        throw std::invalid_argument("Inadequate size of compared matrix");
    int sz = this->size();
    for(int i = 0; i < sz; i++)
        for(int j = 0; j < sz; j++) 
            if(_matrix[i][j] != matr._matrix[i][j])
                return false;
    return true;
}
///////////////////////////////////////////////////////////////////////////////
bool matrix::operator!=(const matrix& matr) const
{
    return !operator==(matr);
    //or maybe
    //return !(*this == matr);
}
как правильно?

Добавлено через 3 минуты
C++
1
2
3
4
inline size_t matrix::size() const
{
    return _matrix.size();
}
нужно ли писать inline?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.02.2012, 19:29     матрица. клас. 2 #6
Цитата Сообщение от Mayonez Посмотреть сообщение
нужно ли писать inline?
Все равно компилятор будет сам решать. Я считаю, что не нужно.

Добавлено через 2 минуты
Цитата Сообщение от Mayonez Посмотреть сообщение
matrix * *operator* * *(const matrix& matr) * const;
Зачем? Будет ошибка.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
21.02.2012, 19:39  [ТС]     матрица. клас. 2 #7
Цитата Сообщение от go Посмотреть сообщение
Зачем? Будет ошибка.
??? ? ?

Добавлено через 2 минуты
Цитата Сообщение от go Посмотреть сообщение
Все равно компилятор будет сам решать. Я считаю, что не нужно.
но если функция описана внутри класса, то она всегда будет inline?
а если реализация вне класса, то решает компилятор? а как должно быть по стандарту?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2012, 20:16     матрица. клас. 2
Еще ссылки по теме:

C++ клас Letter, клас Person
C++ клас myDate
клас птиц C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.02.2012, 20:16     матрица. клас. 2 #8
Цитата Сообщение от Mayonez Посмотреть сообщение
??? ? ?
Я не разобрался.

Добавлено через 17 минут
Цитата Сообщение от Mayonez Посмотреть сообщение
но если функция описана внутри класса, то она всегда будет inline?
Зачем писать inline, если функция определённая внутри тела класса, является inline по умолчанию.
Yandex
Объявления
21.02.2012, 20:16     матрица. клас. 2
Ответ Создать тему
Опции темы

Текущее время: 18:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru