Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 7

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

14.10.2015, 10:25. Показов 1474. Ответов 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)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2015, 10:25
Ответы с готовыми решениями:

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

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

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

8
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
14.10.2015, 10:46
Лучший ответ Сообщение было отмечено roo3 как решение

Решение

Копиконструктор
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 / 2
Регистрация: 07.08.2015
Сообщений: 72
14.10.2015, 10:46
roo3, а где высвобождение памяти, отводимой под матрицы?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
14.10.2015, 10:52
Цитата Сообщение от zss Посмотреть сообщение
C++
1
if(this!=&M)
желательно это условие и в конструктор копии вставить.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
14.10.2015, 10:52
Цитата Сообщение от roo3 Посмотреть сообщение
Файл: functionss.h
Этот файл надо переобозвать как functionss.cpp и подключить к проекту в раздел "Файлы исходного кода".
И в конструкторе Matrix::Matrix(int i,int j) имеет смысл присвоить значение созданным элементам массива Matr
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
14.10.2015, 10:54
Цитата Сообщение от zss Посмотреть сообщение
C++
1
terurn *this;
все конечно поняли, что Вы хотели написать return, но все же
0
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
14.10.2015, 10:55
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
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
14.10.2015, 10:59
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
желательно это условие и в конструктор копии вставить
Приведите пример, когда это может быть?
Копиконструктор вызывается при СОЗДАНИИ объекта и, следовательно, условие if(this!=&M) никогда не будет истинным.

Добавлено через 1 минуту
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
все конечно поняли, что Вы хотели написать return
Пардон, левая рука всегда печатает медленнее правой
1
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 7
16.10.2015, 16:02  [ТС]
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2015, 16:02
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru