#include <iostream>
using namespace std;
// 1) що негаразд із кодом з погляду інкапсуляції? Як виправити?
// 2) додайте можливість виклику конструктора без параметрів, щоб створювалася матриця розміру 1Х1
//3) реалізувати деструктор
// 4) перевантажити операцію + додавання 2х матриць
// 5) перевантажити операцію - віднімання 2х матриць
// 6) обробити створення матриці з негативною розмірністю
// 7)перевантажити операцію * множення матриці на матрицю
// 9) написати клас спадкоємець квадратна матриця, з методом обчислює слід матриці (сума елементів головної діаганалі)
template <typename T>
class Matrix
{
protected:
T **a;
int size1;
int size2;
public:
Matrix() : size1(1), size2(1) {
a = new T * [1];
a[0] = new T [1];
}
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;
}
Matrix operator-(const Matrix& lhs)const{
Matrix d(size1,size2);
for(int i=0;i<size1;i++){
for(int j=0;j<size2;j++){
d.a[i][j]=a[i][j]-lhs.a[i][j];
}
}
return d;
}
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;
}
~Matrix() {//delete a;
}
};
int main(void)
{
Matrix<double> a(2,2);
cin>>a;
Matrix<double> b(2,2);
cin>>b;
Matrix<double> c(2,2);
Matrix<double> d(2,2);
c=a+b;
d=a-b;
Matrix<int> f;
cout<<c;
cout<<d;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovLyAxKSDRidC+INC90LXQs9Cw0YDQsNC30LQg0ZbQtyDQutC+0LTQvtC8INC3INC/0L7Qs9C70Y/QtNGDINGW0L3QutCw0L/RgdGD0LvRj9GG0ZbRlz8g0K/QuiDQstC40L/RgNCw0LLQuNGC0Lg/Ci8vIDIpINC00L7QtNCw0LnRgtC1INC80L7QttC70LjQstGW0YHRgtGMINCy0LjQutC70LjQutGDINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQsCDQsdC10Lcg0L/QsNGA0LDQvNC10YLRgNGW0LIsINGJ0L7QsSDRgdGC0LLQvtGA0Y7QstCw0LvQsNGB0Y8g0LzQsNGC0YDQuNGG0Y8g0YDQvtC30LzRltGA0YMgMdClMQovLzMpINGA0LXQsNC70ZbQt9GD0LLQsNGC0Lgg0LTQtdGB0YLRgNGD0LrRgtC+0YAKLy8gNCkg0L/QtdGA0LXQstCw0L3RgtCw0LbQuNGC0Lgg0L7Qv9C10YDQsNGG0ZbRjiArINC00L7QtNCw0LLQsNC90L3RjyAy0YUg0LzQsNGC0YDQuNGG0YwKLy8gNSkg0L/QtdGA0LXQstCw0L3RgtCw0LbQuNGC0Lgg0L7Qv9C10YDQsNGG0ZbRjiAtINCy0ZbQtNC90ZbQvNCw0L3QvdGPIDLRhSDQvNCw0YLRgNC40YbRjAovLyA2KSDQvtCx0YDQvtCx0LjRgtC4INGB0YLQstC+0YDQtdC90L3RjyDQvNCw0YLRgNC40YbRliDQtyDQvdC10LPQsNGC0LjQstC90L7RjiDRgNC+0LfQvNGW0YDQvdGW0YHRgtGOCi8vIDcp0L/QtdGA0LXQstCw0L3RgtCw0LbQuNGC0Lgg0L7Qv9C10YDQsNGG0ZbRjiAqINC80L3QvtC20LXQvdC90Y8g0LzQsNGC0YDQuNGG0ZYg0L3QsCDQvNCw0YLRgNC40YbRjgovLyA5KSDQvdCw0L/QuNGB0LDRgtC4INC60LvQsNGBINGB0L/QsNC00LrQvtGU0LzQtdGG0Ywg0LrQstCw0LTRgNCw0YLQvdCwINC80LDRgtGA0LjRhtGPLCDQtyDQvNC10YLQvtC00L7QvCDQvtCx0YfQuNGB0LvRjtGUINGB0LvRltC0INC80LDRgtGA0LjRhtGWICjRgdGD0LzQsCDQtdC70LXQvNC10L3RgtGW0LIg0LPQvtC70L7QstC90L7RlyDQtNGW0LDQs9Cw0L3QsNC70ZYpCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgTWF0cml4CnsKCXByb3RlY3RlZDoKCVQgKiphOwoJaW50IHNpemUxOwoJaW50IHNpemUyOwoJcHVibGljOgogICAgTWF0cml4KCkgOiBzaXplMSgxKSwgc2l6ZTIoMSkgewogICAgICAgIGEgPSBuZXcgVCAqIFsxXTsKICAgICAgICBhWzBdID0gbmV3IFQgWzFdOwogICAgICAgIH0KCU1hdHJpeChpbnQgbiwgaW50IG0pIDogc2l6ZTEobiksIHNpemUyKG0pewoJCWEgPSBuZXcgVCAqIFtuXTsgICAgCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspewoJCQlhW2ldID0gbmV3IFQgW21dOwoJCX0KICB9CiAgVCogb3BlcmF0b3IgW10oY29uc3QgaW50IGkpIHtyZXR1cm4gYVtpXTt9CiAgCU1hdHJpeCBvcGVyYXRvcisoY29uc3QgTWF0cml4JiBsaHMpY29uc3R7CiAgCQlNYXRyaXggYyhzaXplMSxzaXplMik7CgkJIGZvcihpbnQgaT0wO2k8c2l6ZTE7aSsrKXsKCQkgCWZvcihpbnQgaj0wO2o8c2l6ZTI7aisrKXsKCQkgCQljLmFbaV1bal09YVtpXVtqXStsaHMuYVtpXVtqXTsKCQkgfQoJCSB9CgkJcmV0dXJuIGM7CgkJIH0KCQkgTWF0cml4IG9wZXJhdG9yLShjb25zdCBNYXRyaXgmIGxocyljb25zdHsKICAJCU1hdHJpeCBkKHNpemUxLHNpemUyKTsKCQkgZm9yKGludCBpPTA7aTxzaXplMTtpKyspewoJCSAJZm9yKGludCBqPTA7ajxzaXplMjtqKyspewoJCSAJCWQuYVtpXVtqXT1hW2ldW2pdLWxocy5hW2ldW2pdOwoJCSB9CgkJIH0KCQlyZXR1cm4gZDsKCQkgfQoJCSAJZnJpZW5kCW9zdHJlYW0mIG9wZXJhdG9yPDwgKG9zdHJlYW0mIG9zLCBjb25zdCBNYXRyaXgmIGEpICB7ICAKLy8JICBjb3VudFQrKzsKCQlmb3IoaW50IGk9MDtpPGEuc2l6ZTE7aSsrKXsKCQkJZm9yKGludCBqPTA7ajxhLnNpemUyO2orKyl7CgkJCQlvczw8YS5hW2ldW2pdPDwiICI7CgkJCX0KCQkJb3M8PGVuZGw7CgkJfQogICAgCXJldHVybiBvczsKCX0KIAlmcmllbmQJaXN0cmVhbSYgb3BlcmF0b3I+PiAoaXN0cmVhbSYgaXMsIGNvbnN0IE1hdHJpeCYgYSkgIHsgIAovLwkgIGNvdW50VCsrOwoJCWZvcihpbnQgaT0wO2k8YS5zaXplMTtpKyspewoJCQlmb3IoaW50IGo9MDtqPGEuc2l6ZTI7aisrKXsKCQkJCWlzPj5hLmFbaV1bal07CgkJCX0KCQl9CiAgICAJcmV0dXJuIGlzOwoJfQoJfk1hdHJpeCgpIHsvL2RlbGV0ZSBhOwoJfQp9OwoKaW50IG1haW4odm9pZCkKewogIE1hdHJpeDxkb3VibGU+IGEoMiwyKTsKICBjaW4+PmE7CiAgTWF0cml4PGRvdWJsZT4gYigyLDIpOwogIGNpbj4+YjsKICBNYXRyaXg8ZG91YmxlPiBjKDIsMik7CiAgTWF0cml4PGRvdWJsZT4gZCgyLDIpOwogIGM9YStiOwogIGQ9YS1iOwogIE1hdHJpeDxpbnQ+IGY7CiAgY291dDw8YzsKICBjb3V0PDxkOwogIHJldHVybiAwOwp9Cgo=