fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3. // 1) що негаразд із кодом з погляду інкапсуляції? Як виправити?
  4. // 2) додайте можливість виклику конструктора без параметрів, щоб створювалася матриця розміру 1Х1
  5. //3) реалізувати деструктор
  6. // 4) перевантажити операцію + додавання 2х матриць
  7. // 5) перевантажити операцію - віднімання 2х матриць
  8. // 6) обробити створення матриці з негативною розмірністю
  9. // 7)перевантажити операцію * множення матриці на матрицю
  10. // 9) написати клас спадкоємець квадратна матриця, з методом обчислює слід матриці (сума елементів головної діаганалі)
  11.  
  12. template <typename T>
  13. class Matrix
  14. {
  15. protected:
  16. T **a;
  17. int size1;
  18. int size2;
  19. public:
  20. Matrix() : size1(1), size2(1) {
  21. a = new T * [1];
  22. a[0] = new T [1];
  23. }
  24. Matrix(int n, int m) : size1(n), size2(m){
  25. a = new T * [n];
  26. for (int i = 0; i < n; i++){
  27. a[i] = new T [m];
  28. }
  29. }
  30. T* operator [](const int i) {return a[i];}
  31. Matrix operator+(const Matrix& lhs)const{
  32. Matrix c(size1,size2);
  33. for(int i=0;i<size1;i++){
  34. for(int j=0;j<size2;j++){
  35. c.a[i][j]=a[i][j]+lhs.a[i][j];
  36. }
  37. }
  38. return c;
  39. }
  40. Matrix operator-(const Matrix& lhs)const{
  41. Matrix d(size1,size2);
  42. for(int i=0;i<size1;i++){
  43. for(int j=0;j<size2;j++){
  44. d.a[i][j]=a[i][j]-lhs.a[i][j];
  45. }
  46. }
  47. return d;
  48. }
  49. friend ostream& operator<< (ostream& os, const Matrix& a) {
  50. // countT++;
  51. for(int i=0;i<a.size1;i++){
  52. for(int j=0;j<a.size2;j++){
  53. os<<a.a[i][j]<<" ";
  54. }
  55. os<<endl;
  56. }
  57. return os;
  58. }
  59. friend istream& operator>> (istream& is, const Matrix& a) {
  60. // countT++;
  61. for(int i=0;i<a.size1;i++){
  62. for(int j=0;j<a.size2;j++){
  63. is>>a.a[i][j];
  64. }
  65. }
  66. return is;
  67. }
  68. ~Matrix() {//delete a;
  69. }
  70. };
  71.  
  72. int main(void)
  73. {
  74. Matrix<double> a(2,2);
  75. cin>>a;
  76. Matrix<double> b(2,2);
  77. cin>>b;
  78. Matrix<double> c(2,2);
  79. Matrix<double> d(2,2);
  80. c=a+b;
  81. d=a-b;
  82. Matrix<int> f;
  83. cout<<c;
  84. cout<<d;
  85. return 0;
  86. }
  87.  
  88.  
Success #stdin #stdout 0.01s 5288KB
stdin
1 2
1 2
4 5
5 6
stdout
5 7 
6 8 
-3 -3 
-4 -4