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

Класс Матрица - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ошибки линковки с++(... http://www.cyberforum.ru/cpp-beginners/thread440922.html
помогите пожалуйста!! справится с ошибками линковки масив.obj : error LNK2001: unresolved external symbol "void __cdecl obr(int &,int *)" (?obr@@YAXAAHPAH@Z) масив.obj : error LNK2001: unresolved external symbol "void __cdecl vvod(int &,int *)" (?vvod@@YAXAAHPAH@Z) Debug/масив.exe : fatal error LNK1120: 2 unresolved externals Error executing link.exe. #include <iostream> #include <conio.h>...
C++ Нетбинс ругается создаю срр файл на нетбинсе самый обычный компилирую выводит окошку с сообщением невозможно создать папку nbproject! С чего бы? Как можно исправить? http://www.cyberforum.ru/cpp-beginners/thread440910.html
ошибка в считывание файла или записи C++
#include <iostream> #include <fstream> #include <cstdlib> #include <cstring> #include <altconio.h> #include <iomanip> using namespace std; struct br
C++ Вычислить уравнения
Добрый день! Помогите пожалуйста решить 2 задачи на Языке С++ 1. Вычислить y=√(3+√(6+⋯+ √(96+√99) ) ) 2. Вычислить p=(1-1/2^2 )(1-1/2^3 )…(1-1/n^2 ),где n>2
C++ NullReferenceException http://www.cyberforum.ru/cpp-beginners/thread440851.html
Здравствуйте, ребят. Второй месяц изучаю С++, вот на днях задался целью написать связанный список. К сожалению, материала по этой теме не столько много поэтому после прочтения двух статей я взялся за дело. Вот что у меня вышло: #include <stdafx.h> #include <iostream> #include <cstdlib> #include <string> using namespace std;
C++ Как управлять веб-камерой с помощью кода. Здравствуйте, как написать программу, которая будет использовать веб-камеру для съемки видео или фотографий. Знаете, что-то вроде motion detection хотелось реализовать, но не знаю как. P.S. веб-камера logitech QuickCam for Notebooks подробнее

Показать сообщение отдельно
miriganua
130 / 101 / 4
Регистрация: 05.02.2012
Сообщений: 241
05.02.2012, 23:57  [ТС]     Класс Матрица
Нестыковку с конструкторами вроде решил. Отрицательные значения отбрасывать не хочу, потому что в будущем вижу такую ситуацию: пользователь вводит отрицательный размер, а программа ему пишет об ошибке. Проблемку с заголовочными файлами и пространством имен не решил, посему прошу подсказать, а то чето совсем запутался.

Дополнил класс действиями +,-,* для матриц; вводом и выводом матрицы; сделал оператор присвоения. Вот что получилось:

Заголовочный файл classMatrix.h:

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
#ifndef classMatrix_h
#define classMatrix_h
 
#include <iostream>
 
using namespace std;
 
class Matrix
{
    //classes for exception handling
    class IncorrectSize { }; 
    class IrrelevantSizes { };
 
    //input the matrix
    friend istream& operator>>(istream& in, Matrix& mat);
    //output the  matrix
    friend ostream& operator<<(ostream& out, const Matrix& mat);
 
    //addition operator
    friend Matrix operator+(const Matrix& mat1, const Matrix& mat2);
    //subtraction operator
    friend Matrix operator-(const Matrix& mat1, const Matrix& mat2);
    //multiplication operator
    friend Matrix operator*(const Matrix& mat1, const Matrix& mat2);
private:
    double** a;
    int row, col;
 
public:
    //constructor of a matrix with certain sizes
    Matrix(int amount_of_row, int amount_of_col);
    //copy constructor
    Matrix(const Matrix& mat);
    //empty matrix
    Matrix();
 
    //destructor
    ~Matrix();
 
    //assignment
    void operator=(const Matrix& mat);
};
 
#endif
Файл classMatrix.cpp:

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include "classMatrix.h"         
                                 
Matrix::Matrix(int amount_of_row, int amount_of_col)
{
    if (amount_of_row < 0 || amount_of_col < 0)
    {
        throw IncorrectSize(); 
    }
    row = amount_of_row;
    col = amount_of_col;
    a = new double* [row];
    for (int i = 0; i < row; i++)
    {
        a[i] = new double [col]; 
    }
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            a[i][j] = 0;
        }
    }
}
 
Matrix::Matrix(const Matrix& mat)
{
    row = mat.row;
    col = mat.col;
    a = new double* [row];
    for (int i = 0; i < row; i++)
    {
        a[i] = new double [col]; 
    }
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            a[i][j] = mat.a[i][j];
        }
    }
}
 
Matrix::Matrix()
{
    row = 0;
    col = 0;
    a = 0;
}
 
Matrix::~Matrix()
{
    for (int i = 0; i < row; i++)
    {
        delete [] a[i];
    }
    delete [] a;
}
 
void Matrix::operator=(const Matrix& mat)
{
    if (row != mat.row || col != mat.col)
    {
        throw IrrelevantSizes();
    }
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            a[i][j] = mat.a[i][j];
        }
    }
}
 
istream& operator>>(istream& in, Matrix& mat)
{
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            in >> mat.a[i][j];
        }
    }
      
    return in;
}
 
ostream& operator<<(ostream& out, const Matrix& mat)
{
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            out << mat.a[i][j] << "   ";
        }
        out << '\n';
    }
    return out;
}
 
Matrix operator+(const Matrix& mat1, const Matrix& mat2)
{
    if (mat1.row != mat2.row || mat1.col != mat2.col)
    {
        throw Matrix::IrrelevantSizes();
    }
    Matrix mat(mat1.row, mat1.col);
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            mat.a[i][j] = mat1.a[i][j] + mat2.a[i][j];
        }
    }
    return mat;
}
 
Matrix operator-(const Matrix& mat1, const Matrix& mat2)
{
    if (mat1.row != mat2.row || mat1.col != mat2.col)
    {
        throw Matrix::IrrelevantSizes();
    }
    Matrix mat(mat1.row, mat1.col);
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            mat.a[i][j] = mat1.a[i][j] - mat2.a[i][j];
        }
    }
    return mat;
}
 
Matrix operator*(const Matrix& mat1, const Matrix& mat2)
{
    if (mat1.col != mat2.row)
    {
        throw Matrix::IrrelevantSizes();
    }
    Matrix mat(mat1.row, mat2.col);
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            for (int k = 0; k < mat1.col; k++)
            {
                mat.a[i][j] += mat1.a[i][k] * mat2.a[k][j];
            }
        }
    }
    return mat;
}
Файл тестирование класса Teting of the class:

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
#include "classMatrix.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    try
    {
        Matrix A(3, 3);
        Matrix B(3, 3);
        cin >> A >> B;
        cout << A * B << '\n';
        cout << A + B << '\n';
        cout << A - B << '\n';
    }
    catch (Matrix::IncorrectSize)
    {
        cout << "Matrix with such sizes can not exist." << '\n';
    }
    catch (Matrix::IrrelevantSizes)
    {
        cout << "Matrices have irrelevant sizes." << '\n';
    }
    return 0;
}
 
Текущее время: 12:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru