Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

14.10.2015, 10:25. Просмотров 249. Ответов 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;
            }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2015, 10:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В чем моя ошибка?(ООП, классы) (C++):

В чем моя ошибка ? - C++
задача ввести в Мэмо числа , поместить в массив и найти минимальное из них , выводя его в Эдит ... в чем я ошибся ?? подскажите...

В чем моя ошибка? - C++
В чем моя ошибка? #include &lt;iostream.h&gt; main() { int x, y, z; x=2+n; y=3.5+x; cout...

в чем моя ошибка?? - C++
вот программа на паскале: var tmp, find : real; k : real; begin k:= 1; tmp:=...

подскажите пожалуйста, в чем моя ошибка? - C++
подскажите пожалуйста, в чем моя ошибка? надо определить точки принадлежащие и не пренадлежащие темной фигуре... ...

Пытаюсь создать описание класса одномерных массивов строк. В чем моя ошибка? - C++
Помогите пожалуйста! Пытаюсь создать описание класса одномерных массивов строк. В чем моя ошибка? #include &lt;iostream&gt; #include...

Программа на контестере проходит только 1 тест из 9. Можете объяснить, в чем моя ошибка и как ее исправить! - C++
Объясните, в чем моя ошибка в решении задачи. Условие: 103. Подсчет войск ограничение времени на тест: 0.5 сек. ...

8
zss
Модератор
Эксперт С++
6820 / 6382 / 2133
Регистрация: 18.12.2011
Сообщений: 16,744
Завершенные тесты: 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;
}
1
EfesXZC
2 / 2 / 1
Регистрация: 07.08.2015
Сообщений: 72
14.10.2015, 10:46 #3
roo3, а где высвобождение памяти, отводимой под матрицы?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 702
Регистрация: 14.05.2014
Сообщений: 5,870
Записей в блоге: 1
Завершенные тесты: 5
14.10.2015, 10:52 #4
Цитата Сообщение от zss Посмотреть сообщение
C++
1
if(this!=&M)
желательно это условие и в конструктор копии вставить.
0
zss
Модератор
Эксперт С++
6820 / 6382 / 2133
Регистрация: 18.12.2011
Сообщений: 16,744
Завершенные тесты: 1
14.10.2015, 10:52 #5
Цитата Сообщение от roo3 Посмотреть сообщение
Файл: functionss.h
Этот файл надо переобозвать как functionss.cpp и подключить к проекту в раздел "Файлы исходного кода".
И в конструкторе Matrix::Matrix(int i,int j) имеет смысл присвоить значение созданным элементам массива Matr
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 702
Регистрация: 14.05.2014
Сообщений: 5,870
Записей в блоге: 1
Завершенные тесты: 5
14.10.2015, 10:54 #6
Цитата Сообщение от zss Посмотреть сообщение
C++
1
terurn *this;
все конечно поняли, что Вы хотели написать return, но все же
0
EfesXZC
2 / 2 / 1
Регистрация: 07.08.2015
Сообщений: 72
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;
        }
0
zss
Модератор
Эксперт С++
6820 / 6382 / 2133
Регистрация: 18.12.2011
Сообщений: 16,744
Завершенные тесты: 1
14.10.2015, 10:59 #8
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
желательно это условие и в конструктор копии вставить
Приведите пример, когда это может быть?
Копиконструктор вызывается при СОЗДАНИИ объекта и, следовательно, условие if(this!=&M) никогда не будет истинным.

Добавлено через 1 минуту
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
все конечно поняли, что Вы хотели написать return
Пардон, левая рука всегда печатает медленнее правой
1
roo3
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 7
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;
            }
};
Все, сообразил
0
16.10.2015, 16:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2015, 16:02
Привет! Вот еще темы с ответами:

Классы (в чем ошибка?) - C++
подскажите в чем ошибка? #include &lt;iostream&gt; using namespace std; class Kana { private: int day, month,...

Зацикливание программы. В чем же ошибка? ( Упражнение 5 Глава 7 Лафоре ООП C++) - C++
Миллион раз пересмотрел, ну не вижу ошибку и все тут :(. Должна же остановка на вводе быть! Что туда передается.... Не понятно... Помогите...

В чем моя ошибка? Оператор "<<" - C++
Разбирал пример. #include &lt;iostream&gt; using namespace std; int main() { enum Days { Sunday, Monday, Tuesdey, Wednesday,...

ООП Классы - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;iomanip&gt; #include &lt;sstream&gt; #include &lt;limits&gt; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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