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

Написать класс «матрица» - C++

Восстановить пароль Регистрация
 
 
Катя 89
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 9
10.07.2014, 17:51     Написать класс «матрица» #1
Добрый день я новичок помогите мне Написать класс «матрица». В классе реализовать следующие методы: конструкторы (по умолчанию, с
параметрами, копирования), деструктор, ввод с клавиатуры, поиск элемента по ключу,
вывод на экран (в виде методов класса и при помощи перегруженных операций
потокового ввода и вывода), перегрузить следующие операции: +, += (сложение матриц),
– (вычитание), = (присвоение), = = (сравнение по элементам), [] (взятие элемента с
заданным индексом).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
14.07.2014, 08:06     Написать класс «матрица» #21
Kukurudza, Тогда объясните мне, чем
C++
1
using namespace std;
хуже
C++
1
2
using std::cout;
using std::cin;
?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:17     Написать класс «матрица» #22
где-то в моем коде:
C++
1
2
3
4
5
6
7
файл some_cool_massive.h
 
namespace cool_containers {
template <typename T>
class vector {
};
}
где-то в твоем коде:

C++
1
2
3
4
5
6
7
#include <vector>
#include <some_cool_massive.h>
 
using namespace std;
using namespace cool_containers;
 
vector<int> v;
компилируй

Добавлено через 1 минуту
ты пытаешься использовать using как противоядие от namespace. namespace это не яд.
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
14.07.2014, 08:21     Написать класс «матрица» #23
Kukurudza, Все, теперь понял. Ну я имел в виду такие проги, где не нужно подключать библиотеки, подобные вашей То есть проги, в которых нужно только одно пространство имен std.
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:25     Написать класс «матрица» #24
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Kukurudza, Все, теперь понял. Ну я имел в виду такие проги, где не нужно подключать библиотеки, подобные вашей То есть проги, в которых нужно только одно пространство имен std.
через месяц к вы придете к преподу а он вам скажет, поиспользуйте это...
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
14.07.2014, 08:32     Написать класс «матрица» #25
Kukurudza, Я разберусь и "поиспользую" в таком случае Я вам говорю про легкие программы, где ведь можно не заморачиваться с
C++
1
2
using std::cin;
using std::cout;
а написать
C++
1
using namespace std;
Или тогда вообще не писать все выше написанное, а писать где надо
C++
1
std::...
Просто для меня непривычно смотрится
C++
1
2
using std::cout;
using std::cin;
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:38     Написать класс «матрица» #26
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
а написать
Код C++
1
using namespace std;
плохо
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Или тогда вообще не писать все выше написанное, а писать где надо
Код C++
1
std::...
хорошо. хороший тон.
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Просто для меня непривычно смотрится
Код C++
1
2
using std::cout;
using std::cin;
плохо. дурной тон
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2014, 02:30     Написать класс «матрица»
Еще ссылки по теме:

C++ Написать класс "матрица"
Класс Матрица C++

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
15.07.2014, 02:30     Написать класс «матрица» #27
Частично какая-то реализация уже есть тут:
Класс матрица (не работает конструктор копирования)

Добавлено через 10 минут
Полностью задание мне делать влом, поэтому по мелочи. На поиграться хватит, остальные перегрузки можешь дописать сама:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cstring>
 
template<typename T>
class Matrix
{
private:
    size_t rows_count, columns_count;
    T **data;
 
public:
    Matrix(size_t rows=5, size_t columns=5);
    Matrix(const Matrix<T>& matrix_obj);
    virtual ~Matrix();
    T* operator[](size_t index);
    bool operator ==(const Matrix<T>& matrix_obj);
 
    template<typename T2>
    friend std::istream& operator>>(std::istream&, const Matrix<T2>&);
    template<typename T2>
    friend std::ostream& operator<<(std::ostream&, const Matrix<T2>&);
};
 
template<typename T>
Matrix<T>::Matrix(size_t rows, size_t columns): rows_count{rows}, columns_count{columns}, data{new T*[rows]}
{
    data[0] = new T[rows*columns];
    for(size_t i=1;i<rows;++i)
        data[i] = data[0]+(i * columns);
}
 
template<typename T>
Matrix<T>::~Matrix()
{
    delete[] data[0];
    delete[] data;
}
 
template<typename T>
T* Matrix<T>::operator [](size_t index) { return data[index]; }
 
template<typename T>
Matrix<T>::Matrix(const Matrix<T>& matrix_obj): rows_count{matrix_obj.rows_count},
        columns_count{matrix_obj.columns_count}, data{new T*[rows_count]}
{
    data[0] = new T[rows_count*columns_count];
    std::memcpy(data[0], matrix_obj.data[0], sizeof(T)*rows_count*columns_count);
    for(size_t i=1;i<rows_count;++i)
        data[i] = data[0]+(i * columns_count);
}
 
template<typename T>
bool Matrix<T>::operator ==(const Matrix& matrix_obj)
{
    if(rows_count != matrix_obj.rows_count || columns_count != matrix_obj.columns_count)
        return false;
    return (memcmp(data[0], matrix_obj.data[0], sizeof(T)*rows_count*columns_count)==0)?true:false;
}
 
template<typename T>
std::istream& operator>>(std::istream& in_stream, const Matrix<T>& matrix_obj)
{
    for(size_t i=0;i!=matrix_obj.rows_count;++i)
        for(size_t j=0;j!=matrix_obj.columns_count;++j)
            std::cout<<"Matrix["<<i<<"]["<<j<<"] = ", std::cin>>matrix_obj.data[i][j];
    return in_stream;
}
 
template<typename T>
std::ostream& operator<<(std::ostream& out_stream, const Matrix<T>& matrix_obj)
{
    for(size_t i=0;i!=matrix_obj.rows_count;++i)
    {
        std::cout<<std::endl;
        for(size_t j=0;j!=matrix_obj.columns_count;++j)
            std::cout<<matrix_obj.data[i][j]<<" ";
    }
    return out_stream;
}
Пример использования:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    Matrix<int> a(2,2);
    std::cin>>a;
    std::cout<<a;
    Matrix<int> c(2,2);
    std::cin>>c;
    std::cout<<c;
    if(a==c)
        std::cout<<std::endl<<"equal"<<std::endl;
    else
        std::cout<<std::endl<<"not equal"<<std::endl;
    a[1][1] = 10;
    std::cout<<a;
    return 0;
}
Pay attention, это просто набросок, нет никаких проверок. И к элементу матрицы 10x10 можно обратиться через [0][25] и так далее.
Yandex
Объявления
15.07.2014, 02:30     Написать класс «матрица»
Ответ Создать тему
Опции темы

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