#include <iostream>
using namespace std;
// 1) що негаразд із кодом з погляду інкапсуляції? Як виправити?
// 2) додайте можливість виклику конструктора без параметрів, щоб створювалася матриця розміру 1Х1
//3) реалізувати деструктор
// 4) перевантажити операцію + додавання 2х матриць
// 5) перевантажити операцію - віднімання 2х матриць
// 6) обробити створення матриці з негативною розмірністю
// 7)перевантажити операцію * множення матриці на матрицю
// 9) написати клас спадкоємець квадратна матриця, з методом обчислює слід матриці (сума елементів головної діаганалі)
template <typename T>
class Matrix
{
public:
T **a;
int size1;
int size2;
Matrix(int n, int m) : size1(n), size2(m){
a = new T * [n];
for (int i = 0; i < n; i++){
a[i] = new T [m];
}
}
T* operator [](const int i) {return a[i];}
Matrix operator+(const Matrix& lhs)const{
Matrix c(size1,size2);
for(int i=0;i<size1;i++){
for(int j=0;j<size2;j++){
c.a[i][j]=a[i][j]+lhs.a[i][j];
}
}
return c;
}
friend ostream& operator<< (ostream& os, const Matrix& a) {
// countT++;
for(int i=0;i<a.size1;i++){
for(int j=0;j<a.size2;j++){
os<<a.a[i][j]<<" ";
}
os<<endl;
}
return os;
}
friend istream& operator>> (istream& is, const Matrix& a) {
// countT++;
for(int i=0;i<a.size1;i++){
for(int j=0;j<a.size2;j++){
is>>a.a[i][j];
}
}
return is;
}
};
int main(void)
{
Matrix<double> a(2,2);
cin>>a;
Matrix<double> b(2,2);
cin>>b;
Matrix<double> c(2,2);
c=a+b;
cout<<c;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovLyAxKSDRidC+INC90LXQs9Cw0YDQsNC30LQg0ZbQtyDQutC+0LTQvtC8INC3INC/0L7Qs9C70Y/QtNGDINGW0L3QutCw0L/RgdGD0LvRj9GG0ZbRlz8g0K/QuiDQstC40L/RgNCw0LLQuNGC0Lg/Ci8vIDIpINC00L7QtNCw0LnRgtC1INC80L7QttC70LjQstGW0YHRgtGMINCy0LjQutC70LjQutGDINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQsCDQsdC10Lcg0L/QsNGA0LDQvNC10YLRgNGW0LIsINGJ0L7QsSDRgdGC0LLQvtGA0Y7QstCw0LvQsNGB0Y8g0LzQsNGC0YDQuNGG0Y8g0YDQvtC30LzRltGA0YMgMdClMQovLzMpINGA0LXQsNC70ZbQt9GD0LLQsNGC0Lgg0LTQtdGB0YLRgNGD0LrRgtC+0YAKLy8gNCkg0L/QtdGA0LXQstCw0L3RgtCw0LbQuNGC0Lgg0L7Qv9C10YDQsNGG0ZbRjiArINC00L7QtNCw0LLQsNC90L3RjyAy0YUg0LzQsNGC0YDQuNGG0YwKLy8gNSkg0L/QtdGA0LXQstCw0L3RgtCw0LbQuNGC0Lgg0L7Qv9C10YDQsNGG0ZbRjiAtINCy0ZbQtNC90ZbQvNCw0L3QvdGPIDLRhSDQvNCw0YLRgNC40YbRjAovLyA2KSDQvtCx0YDQvtCx0LjRgtC4INGB0YLQstC+0YDQtdC90L3RjyDQvNCw0YLRgNC40YbRliDQtyDQvdC10LPQsNGC0LjQstC90L7RjiDRgNC+0LfQvNGW0YDQvdGW0YHRgtGOCi8vIDcp0L/QtdGA0LXQstCw0L3RgtCw0LbQuNGC0Lgg0L7Qv9C10YDQsNGG0ZbRjiAqINC80L3QvtC20LXQvdC90Y8g0LzQsNGC0YDQuNGG0ZYg0L3QsCDQvNCw0YLRgNC40YbRjgovLyA5KSDQvdCw0L/QuNGB0LDRgtC4INC60LvQsNGBINGB0L/QsNC00LrQvtGU0LzQtdGG0Ywg0LrQstCw0LTRgNCw0YLQvdCwINC80LDRgtGA0LjRhtGPLCDQtyDQvNC10YLQvtC00L7QvCDQvtCx0YfQuNGB0LvRjtGUINGB0LvRltC0INC80LDRgtGA0LjRhtGWICjRgdGD0LzQsCDQtdC70LXQvNC10L3RgtGW0LIg0LPQvtC70L7QstC90L7RlyDQtNGW0LDQs9Cw0L3QsNC70ZYpCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgTWF0cml4CnsKCXB1YmxpYzoKCVQgKiphOwoJaW50IHNpemUxOwoJCglpbnQgc2l6ZTI7CglNYXRyaXgoaW50IG4sIGludCBtKSA6IHNpemUxKG4pLCBzaXplMihtKXsKCQlhID0gbmV3IFQgKiBbbl07ICAgIAoJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKCQkJYVtpXSA9IG5ldyBUIFttXTsKCQl9CiAgfQogIFQqIG9wZXJhdG9yIFtdKGNvbnN0IGludCBpKSB7cmV0dXJuIGFbaV07fQogIAlNYXRyaXggb3BlcmF0b3IrKGNvbnN0IE1hdHJpeCYgbGhzKWNvbnN0ewogIAkJTWF0cml4IGMoc2l6ZTEsc2l6ZTIpOwoJCSBmb3IoaW50IGk9MDtpPHNpemUxO2krKyl7CgkJIAlmb3IoaW50IGo9MDtqPHNpemUyO2orKyl7CgkJIAkJYy5hW2ldW2pdPWFbaV1bal0rbGhzLmFbaV1bal07CgkJIH0KCQkgfQoJCXJldHVybiBjOwoJCSB9CgkJIAlmcmllbmQJb3N0cmVhbSYgb3BlcmF0b3I8PCAob3N0cmVhbSYgb3MsIGNvbnN0IE1hdHJpeCYgYSkgIHsgIAovLwkgIGNvdW50VCsrOwoJCWZvcihpbnQgaT0wO2k8YS5zaXplMTtpKyspewoJCQlmb3IoaW50IGo9MDtqPGEuc2l6ZTI7aisrKXsKCQkJCW9zPDxhLmFbaV1bal08PCIgIjsKCQkJfQoJCQlvczw8ZW5kbDsKCQl9CiAgICAJcmV0dXJuIG9zOwoJfQogCWZyaWVuZAlpc3RyZWFtJiBvcGVyYXRvcj4+IChpc3RyZWFtJiBpcywgY29uc3QgTWF0cml4JiBhKSAgeyAgCi8vCSAgY291bnRUKys7CgkJZm9yKGludCBpPTA7aTxhLnNpemUxO2krKyl7CgkJCWZvcihpbnQgaj0wO2o8YS5zaXplMjtqKyspewoJCQkJaXM+PmEuYVtpXVtqXTsKCQkJfQoJCX0KICAgIAlyZXR1cm4gaXM7Cgl9CiAKfTsKCmludCBtYWluKHZvaWQpCnsKICBNYXRyaXg8ZG91YmxlPiBhKDIsMik7CiAgY2luPj5hOwogIE1hdHJpeDxkb3VibGU+IGIoMiwyKTsKICBjaW4+PmI7CiAgTWF0cml4PGRvdWJsZT4gYygyLDIpOwogIGM9YStiOwogIGNvdXQ8PGM7CiAgcmV0dXJuIDA7Cn0KCg==