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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
roo3
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 4
#1

В чем моя ошибка?(ООП, классы) - C++

14.10.2015, 10:25. Просмотров 230. Ответов 8
Метки нет (Все метки)

Что изменить в файле functionss.h? Заранее спасибо!!!


Задание: Определить класс «матрица». В класс включить два конструктора: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции члены: вывод на экран элементов матрицы. Перегрузить оператор: ++ нахождение суммы положительных элементов главной диагонали.

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
Файл: mainfuction.cpp
#include <cstdlib>
#include <iostream>
#include <fstream> 
#include <string> 
#include <clocale> 
#include <string.h>
#include "class.h"
#include "functionss.h"
 
using namespace std;
 
int main()
{   
    int a,b;
    cout<<"Vveite kolichestvo strok"<<endl;
    cin>>a;
    cout<<"Vvedite kolichestvo stolbcov"<<endl;
    cin>>b;
    cout<<endl;
    Matrix M(a,b);
    M.Random();
    M.Display();
    cout<<"___________________________"<<endl;
    Matrix A = M;
    cout<<"___________________________"<<endl;
    A.Display();
    //int Kol=(M.Search());
    cout<<++A;
    cout<<endl;
    //cout<<" Kolichestvo elementov = "<<Kol<<endl;
    return 0;
}
 
Файл: class.h
using namespace std;
 
class Matrix
{
    private:
        int *Matr;
        int m;
        int n;
 
    public:
        // конструкторы и деструктор
         Matrix(int i,int j);
         Matrix(const Matrix &M);
         ~Matrix();
         
         
        void Random();
        //int Search();
        int operator++();
        void Display();
};
Файл: functionss.h
Matrix::Matrix(int i,int j): m(i), n(j) 
         { 
            Matr = new int*[m];
            for (int i=0; i<m; i++)
                Matr[i] = new int[n]; 
         }
Matrix::Matrix(const Matrix &M)
         {
          cout<<"copyed"<<endl;
          Matr = M.Matr;
          m = M.m;
          n = M.n;
         }
int Matrix::operator++()
         {
             int k=0;
          for (int i=0; i<m; i++)if(Matr[i][i]>0)k+=Matr[i][i];
          return k;
         }
Matrix::~Matrix()
        {
        cout<<"deleted"<<endl;
        }  
void Matrix::Random()
{
         for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    Matr[i][j]=rand() % 200 - 100;
                }   
        }
};
 
 
void Matrix::Display()
{
     for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cout.width(4);
                    cout << Matr[i][j];
                }
                cout << endl;
            }
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,187
Завершенные тесты: 1
14.10.2015, 10:46     В чем моя ошибка?(ООП, классы) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Копиконструктор
C++
1
2
3
4
5
6
7
8
9
10
11
Matrix::Matrix(const Matrix &M)
{
      m = M.m;
      n = M.n;
      Matr = new int*[m];
      for (int i=0; i<m; i++)
         Matr[i] = new int[n];          
      for (int i=0; i<m; i++)
        for(int j=0;j<n;j++)
              Matr[i][j]=M.Matr[i][j];
}
Для поддержки ПРАВИЛА ТРЕХ обязателен operator=
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Matrix& operator=(const Matrix &M)
{
  if(this!=&M)
  {      
 
      for (int i=0; i<m; i++)
           delete[] Matr[i];
      delete[] Matr;
      m = M.m;
      n = M.n;
      Matr = new int*[m];
      for (int i=0; i<m; i++)
         Matr[i] = new int[n];          
      for (int i=0; i<m; i++)
        for(int j=0;j<n;j++)
              Matr[i][j]=M.Matr[i][j];
  }
  return *this;
}
EfesXZC
2 / 2 / 1
Регистрация: 07.08.2015
Сообщений: 67
14.10.2015, 10:46     В чем моя ошибка?(ООП, классы) #3
roo3, а где высвобождение памяти, отводимой под матрицы?
Kerry_Jr
Модератор
Эксперт PHP
2178 / 1974 / 689
Регистрация: 14.05.2014
Сообщений: 5,773
Записей в блоге: 1
Завершенные тесты: 5
14.10.2015, 10:52     В чем моя ошибка?(ООП, классы) #4
Цитата Сообщение от zss Посмотреть сообщение
C++
1
if(this!=&M)
желательно это условие и в конструктор копии вставить.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,187
Завершенные тесты: 1
14.10.2015, 10:52     В чем моя ошибка?(ООП, классы) #5
Цитата Сообщение от roo3 Посмотреть сообщение
Файл: functionss.h
Этот файл надо переобозвать как functionss.cpp и подключить к проекту в раздел "Файлы исходного кода".
И в конструкторе Matrix::Matrix(int i,int j) имеет смысл присвоить значение созданным элементам массива Matr
Kerry_Jr
Модератор
Эксперт PHP
2178 / 1974 / 689
Регистрация: 14.05.2014
Сообщений: 5,773
Записей в блоге: 1
Завершенные тесты: 5
14.10.2015, 10:54     В чем моя ошибка?(ООП, классы) #6
Цитата Сообщение от zss Посмотреть сообщение
C++
1
terurn *this;
все конечно поняли, что Вы хотели написать return, но все же
EfesXZC
2 / 2 / 1
Регистрация: 07.08.2015
Сообщений: 67
14.10.2015, 10:55     В чем моя ошибка?(ООП, классы) #7
C++
1
2
3
4
5
6
7
Matrix::~Matrix()
        {
            for (int i=0; i<m; i++)
                 delete[] Matr[i];
            delete[] Matr;
            cout<<"deleted"<<endl;
        }
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,187
Завершенные тесты: 1
14.10.2015, 10:59     В чем моя ошибка?(ООП, классы) #8
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
желательно это условие и в конструктор копии вставить
Приведите пример, когда это может быть?
Копиконструктор вызывается при СОЗДАНИИ объекта и, следовательно, условие if(this!=&M) никогда не будет истинным.

Добавлено через 1 минуту
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
все конечно поняли, что Вы хотели написать return
Пардон, левая рука всегда печатает медленнее правой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2015, 16:02     В чем моя ошибка?(ООП, классы)
Еще ссылки по теме:
Зацикливание программы. В чем же ошибка? ( Упражнение 5 Глава 7 Лафоре ООП C++) C++
C++ В чем моя ошибка? Оператор "<<"
C++ ООП Классы
Классы и объекты в ооп и с++ C++
C++ Начало ООП. Классы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
roo3
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 4
16.10.2015, 16:02  [ТС]     В чем моя ошибка?(ООП, классы) #9
zss,
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
Matrix::Matrix(int i,int j): m(i), n(j) 
         { 
            Matr = new int*[m];
            for (int i=0; i<m; i++)
                Matr[i] = new int[n]; 
         }
Matrix::Matrix(const Matrix &M)
{
      m = M.m;
      n = M.n;
      Matr = new int*[m];
      for (int i=0; i<m; i++)
         Matr[i] = new int[n];          
      for (int i=0; i<m; i++)
        for(int j=0;j<n;j++)
              Matr[i][j]=M.Matr[i][j];
}
Matrix & operator = (const Matrix &M)
{
  if(this!=&M)
  {      
 
      for (int i=0; i<m; i++)
           delete[] Matr[i];
      delete[] Matr;
      m = M.m;
      n = M.n;
      Matr = new int*[m];
      for (int i=0; i<m; i++)
         Matr[i] = new int[n];          
      for (int i=0; i<m; i++)
        for(int j=0;j<n;j++)
              Matr[i][j]=M.Matr[i][j];
  }
  return *this;//присвоение самому себе
}
 
int Matrix::operator++()
         {
             int k=0;
          for (int i=0; i<m; i++)if(Matr[i][i]>0)k+=Matr[i][i];
          return k;
         }
Matrix::~Matrix()
        {
            for (int i=0; i<m; i++)
                 delete[] Matr[i];
            delete[] Matr;
            cout<<"deleted"<<endl;
        }   
void Matrix::Random()
{
         for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    Matr[i][j]=rand() % 200 - 100;
                }   
        }
};
 
 
void Matrix::Display()
{
     for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cout.width(4);
                    cout << Matr[i][j];
                }
                cout << endl;
            }
};
Добавлено через 13 минут
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
Matrix::Matrix(int i,int j): m(i), n(j) 
         { 
            Matr = new int*[m];
            for (int i=0; i<m; i++)
                Matr[i] = new int[n]; 
         }
Matrix::Matrix(const Matrix &M)
{
      m = M.m;
      n = M.n;
      Matr = new int*[m];
      for (int i=0; i<m; i++)
         Matr[i] = new int[n];          
      for (int i=0; i<m; i++)
        for(int j=0;j<n;j++)
              Matr[i][j]=M.Matr[i][j];
}
Matrix & Matrix::operator = (const Matrix &M)
{
  if(this!=&M)
  {      
 
      for (int i=0; i<m; i++)
           delete[] Matr[i];
      delete[] Matr;
      m = M.m;
      n = M.n;
      Matr = new int*[m];
      for (int i=0; i<m; i++)
         Matr[i] = new int[n];          
      for (int i=0; i<m; i++)
        for(int j=0;j<n;j++)
              Matr[i][j]=M.Matr[i][j];
  }
  return *this;//присвоение самому себе
}
 
int Matrix::operator++()
         {
             int k=0;
          for (int i=0; i<m; i++)if(Matr[i][i]>0)k+=Matr[i][i];
          return k;
         }
Matrix::~Matrix()
        {
            for (int i=0; i<m; i++)
                 delete[] Matr[i];
            delete[] Matr;
            cout<<"deleted"<<endl;
        }   
void Matrix::Random()
{
         for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    Matr[i][j]=rand() % 200 - 100;
                }   
        }
};
 
 
void Matrix::Display()
{
     for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cout.width(4);
                    cout << Matr[i][j];
                }
                cout << endl;
            }
};
Все, сообразил
Yandex
Объявления
16.10.2015, 16:02     В чем моя ошибка?(ООП, классы)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru