fork 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. public:
  16. T **a;
  17. int size1;
  18.  
  19. int size2;
  20. Matrix(int n, int m) : size1(n), size2(m){
  21. a = new T * [n];
  22. for (int i = 0; i < n; i++){
  23. a[i] = new T [m];
  24. }
  25. }
  26. T* operator [](const int i) {return a[i];}
  27. Matrix operator+(const Matrix& lhs)const{
  28. Matrix c(size1,size2);
  29. for(int i=0;i<size1;i++){
  30. for(int j=0;j<size2;j++){
  31. c.a[i][j]=a[i][j]+lhs.a[i][j];
  32. }
  33. }
  34. return c;
  35. }
  36. friend ostream& operator<< (ostream& os, const Matrix& a) {
  37. // countT++;
  38. for(int i=0;i<a.size1;i++){
  39. for(int j=0;j<a.size2;j++){
  40. os<<a.a[i][j]<<" ";
  41. }
  42. os<<endl;
  43. }
  44. return os;
  45. }
  46. friend istream& operator>> (istream& is, const Matrix& a) {
  47. // countT++;
  48. for(int i=0;i<a.size1;i++){
  49. for(int j=0;j<a.size2;j++){
  50. is>>a.a[i][j];
  51. }
  52. }
  53. return is;
  54. }
  55.  
  56. };
  57.  
  58. int main(void)
  59. {
  60. Matrix<double> a(2,2);
  61. cin>>a;
  62. Matrix<double> b(2,2);
  63. cin>>b;
  64. Matrix<double> c(2,2);
  65. c=a+b;
  66. cout<<c;
  67. return 0;
  68. }
  69.  
  70.  
Success #stdin #stdout 0.01s 5276KB
stdin
1 2
1 2
4 5
5 6
stdout
5 7 
6 8