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

Класс "Матрица": конструктор, деструктор и перегрузка операторов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить и представить в виде таблицы значения функции Z http://www.cyberforum.ru/cpp-beginners/thread413012.html
Ребят помогите пожалуйста решить задачку:
C++ Алгоритм сортировка деревом Напишите пожалуйста алгоритм сортировки деревом. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread413009.html
C++ Чтение файлов
Доброго времени суток! Хочу спросить у знающих людей такой вопрос! По поводу чтения файлов. У меня есть несколько таких файлов: test1.dat, test2.dat, test3.dat,.... и т.д. я бы хотел реализовать чтение этих файлов всех вместе сразу, а не запускать каждый раз программу для чтения каждого файла поотдельности. Спасибо, если кто поможет!
Помоги написать программу для сложение чисел в 15ричной системе счисления C++
Я только начал заниматься Си++ и не могу написать программу для сложение и вычитания чисел в пятнацатиричной системе, пробовал написать и вот, что получилось, мож кто подскажет, что нужно исправить или нужно её заново уже другим способом саписать??? #include "stdafx.h" #include <iostream> #include <math.h> #include <stdio.h> using namespace std; int _tmain(int argc, _TCHAR* argv) { ...
C++ Предусмотреть в программе просмотр бинарного файла и выполнить его обработку http://www.cyberforum.ru/cpp-beginners/thread412996.html
Имеется информация о телевизорах на складе: наименование, фирма изготовитель, стоимость, размер экрана, количество на складе. Для описания информации о телевизорах на складе в про-грамме необходимо использовать тип данных структура. Для хра-нения информации о телевизорах на складе создать бинарный файл, ориентированный на тип данных структура. Предусмотреть в программе просмотр бинарного файла ...
C++ Подпрограмма умножения 2 матриц #include<iostream.h> const int N=20;const int M=25; double m,l,n; void d(double x,double y,double z) void main () { int i,j; for(i=0;i<N;i++) for(j=0;j<M;j++) { c=0; подробнее

Показать сообщение отдельно
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 06:53     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Цитата Сообщение от maks_b1 Посмотреть сообщение
а можете , для примера описать какую либо функцию.
в качестве примеров написал перегрузку печати матрицы на стандартный вывод, умножения матрицы на целое число и оператора присвоения. Все выполнено в одном файле. (посчитал что так вам будет легче скомпилировать и запусить проект)
Прошу вас обратить внимание на способ перегрузки оператора [] для матрицы. Все дело в том что нельзя перегрузить оператор [][]. Возможно мой способ далек от совершенства но он работает. Если кто-то из людей знающих предложет что-то более простое но чтобы можно было использовать квадартные скобки, буду очень благодарен.
спрашивайте если что-то непонятно.
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include <iostream>
using std::istream;
using std::ostream;
using std::cout;
using std::cin;
using std::endl;
 
#include <iomanip>
using std::setw;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
class KMatrix {
 
    //overloading >>  operators
    friend ostream &operator<<(ostream &, const KMatrix&);
 
private:
    int **myMatrix;
    int rows;
    int columns;
 
    int &getValue(int r, int c) {
        return this->myMatrix[r][c];
    }
 
    //this class is help class to overload  matrix subscript operator [][]
    class KMatrixRow {
    public:
        KMatrixRow(KMatrix &k, int row) :
                km(k) {
            if (row < 0 || row >= k.rows) {
                x = 0;
            } else {
                x = row;
            }
        }
        int &operator[](int y) {
            return km.getValue(x, y);
        }
    private:
        KMatrix &km;
        int x; // row number
    };
 
public:
    KMatrix(int = 4, int = 4); //конструктор по умолчанию если не указан размер матрицы то создается матрица 10 на 10
    ~KMatrix(); //деструктор
 
    void setToZero(); //set all values of matrix to 0
    void setRandValues(int = 0, int = 100); //fill matrix with random values
 
    //overload subscript operator.
    KMatrixRow operator[](int);
 
    //overload multiplication operator
    //multiply matrix with int value
    KMatrix &operator*(const int &);
 
    //overload assignment operator
    KMatrix &operator=(KMatrix &);
 
};
 
//constructor
KMatrix::KMatrix(int r, int c) :
        rows(r > 0 ? r : 4), columns(c > 0 ? c : 4) {
    myMatrix = new int*[r];
    for (int i = 0; i < rows; ++i) {
        myMatrix[i] = new int[columns];
    }
    setToZero();
}
 
//fill matrix with random values
void KMatrix::setRandValues(int from, int to) {
    srand(time(NULL));
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = (from + rand() % to);
        }
    }
}
 
//overload assignment operator
KMatrix &KMatrix::operator=(KMatrix &right) {
    if (&right != this) { // проверяем не присваиваем ли объект сам себе
        for (int i = 0; i < rows; ++i) { //deallocate memory
            delete[] this->myMatrix[i]; //for each row
        }
        delete[] this->myMatrix; //and matrix
 
        this->rows = right.rows;
        this->columns = right.columns;
 
        //create new matrix
        this->myMatrix = new int*[right.rows];
        for (int i = 0; i < this->rows; ++i) {
            this->myMatrix[i] = new int[right.columns];
        }
 
        //fill new matrix with values of right matrix
        for (int i = 0; i < this->rows; ++i) {
            for (int j = 0; j < this->columns; ++j) {
                this->myMatrix[i][j] = right[i][j];
            }
        }
    }
    return *this;
}
 
//overload multiplication operator
KMatrix &KMatrix::operator*(const int &num) {
 
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = this->myMatrix[i][j]*num;
        }
    }
    return *this;
}
 
//overload subscript operator
KMatrix::KMatrixRow KMatrix::operator[](int x) {
    return KMatrixRow(*this, x);
}
 
//overloaded outsream operator;
ostream &operator<<(ostream &out, const KMatrix &km) {
    for (int i = 0; i < km.rows; ++i) {
        for (int j = 0; j < km.columns; ++j) {
            out << setw(4) << km.myMatrix[i][j];
        }
        out << endl;
    }
    return out;
}
 
//set all elements of matrix to 0
void KMatrix::setToZero() {
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = 0;
        }
    }
}
 
//destructor
KMatrix::~KMatrix() {
}
 
int main(void) {
 
    //create KMatrix instance
    KMatrix km(5, 5);
 
    cout << "After initialising\n";
    cout << km;
 
    //set some values
    km[0][0] = 10;
    km[0][1] = 15;
    km[2][3] = 33;
 
    //print results
    cout << "\n\nAfter setting same elements";
    cout << "\n"<< km;
 
    //fill with random values
    km.setRandValues();
 
    //print matrix with random values
    cout << "\n\nAfter setting random values";
    cout << "\n" << km;
 
    int a = 2;
    KMatrix newMatrix;
 
    newMatrix = km * a;
 
    cout << "\n\nAfter multiplying by int value (2)";
    cout << "\n" << newMatrix;
 
    cin.get();
    return 0;
}

Не по теме:

С вам пиво С Наступающим!



Добавлено через 1 минуту
- = ВЫВОД = -

After initialising
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0


After setting same elements
10 15 0 0 0
0 0 0 0 0
0 0 0 33 0
0 0 0 0 0
0 0 0 0 0


After setting random values
77 97 36 14 78
39 96 41 41 43
10 43 6 1 34
94 62 16 91 83
67 53 38 51 29


After multiplying by int value (2)
154 194 72 28 156
78 192 82 82 86
20 86 12 2 68
188 124 32 182 166
134 106 76 102 58

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