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

Не работает конструктор копирования - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Точность типа double http://www.cyberforum.ru/cpp-beginners/thread403569.html
Всем привет! У меня такой код,точность как видите страдает,так как мне нужно с точностью до 20 знака #include<iostream> #include<iomanip> using namespace std; int main() { double a =...
C++ Предлагаю людям как усовершенствовать IDE Dev-Cpp 4.9.9.2 Значит, напомню, среда это давно не развивается уже. Если вы скачаете её, то в предлагаемых пакетах к этой среде последний g++ версии аж 4.5.0 это апрель 2010 года, а сама среда ещё старее, чуть ли... http://www.cyberforum.ru/cpp-beginners/thread403557.html
прокомментируйте мне каждую строку программы C++
что каждая строчка выполняет в программе #include "stdafx.h" #include <iostream>//i/o #include <conio.h> //getch #include <cmath> //fabs, abs using namespace std; void ShowVector(int n,...
Переделывание структуры в класс [С++] C++
//Библиотеки #include "stdafx.h" #include <conio.h> #include "iostream" #include <string.h> using namespace std; //Объявление структуры (3 поля - отправление, прибытие, номер поезда) struct...
C++ Прокомментируйте мне каждую строчку программы. Структура, сортировка, массив, вывод http://www.cyberforum.ru/cpp-beginners/thread403532.html
//Библиотеки #include "stdafx.h" #include <conio.h> #include "iostream" #include <string.h> using namespace std; //Объявление структуры (3 поля - отправление, прибытие, номер поезда) struct...
C++ Ошибка при отладке запускаю программный код на отладку в Microsoft Visual C++ 2010 Express. выдает следующую ошибку в чем причина??? подробнее

Показать сообщение отдельно
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.12.2011, 21:31
ну это где-то у вас ошибки еще есть. в том, что вы тут запостили в int _tmain(int argc, _TCHAR* argv[]) нет использования операторов или конструкторов копирования. значит есть код, где все криво. возможно мешаете операции с матрицами разного размера. у вас операторы заточенны под то, что матрицы одинакового размера. если эта мешанина есть, то развалы ожидаемы.


вот тестик. работает и не крашится:
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "stdafx.h"
#include <iostream>
 
class matrix
{
public:
  double **Matr;
  int size;
 
public:
  matrix(int _N=0);
  matrix(const matrix& A);
  ~matrix();
  matrix& operator = (const matrix& A);
 
  bool operator == (const matrix& A) const;
};
 
matrix::matrix(int _N) : size(_N)
{
  Matr = new double* [size];
  for (int i = 0; i < size; i++)
  {
    Matr[i] = new double[size];
  }
 
  for (int i = 0; i < size; i++)
  {
    for (int j = 0; j < size; j++)
    {
      Matr[i][j] = 0;
    }
  }
}
 
matrix::~matrix()
{
  for (int i = 0; i < size; i++)
  {
    delete [] Matr[i];
  }
  delete [] Matr;
}
 
matrix::matrix(const matrix& A)                 
//копирование - тот самый конструктор, который не рапботает
{
  matrix tmp(A.size);
  size = tmp.size;
  Matr = tmp.Matr;
  tmp.size = 0;
  tmp.Matr = 0;
 
  for (int i=0; i<size; i++)
  {
   for (int j=0; j<size; j++)
   {
     Matr[i][j]=A.Matr[i][j];
   }
  }
}
 
matrix& matrix::operator = (const matrix& A)
{
  if (this != &A)
  {
    matrix tmp(A);
    std::swap(size, tmp.size);
    std::swap(Matr, tmp.Matr);
  }
  return *this;
}
 
bool matrix::operator == (const matrix& A) const
{
  if (size != A.size)
    return false;
 
  for (int i=0; i<size; i++)
  {
    for (int j=0; j<size; j++)
    {
      if (Matr[i][j]!=A.Matr[i][j])
        return false;
    }
  }
  return true;
}
 
int main()
{
  {
    matrix m1(10);
  }
 
  {
    matrix m1(10);
    m1.Matr[0][0] = 6;
    matrix m2(m1);
 
    const bool isSame1 = m1 == m2;
    const bool isSame2 = m2 == m1;
 
    if (isSame1 && isSame2)
      std::cout << "ok" << std::endl;
    else
      std::cout << "error" << std::endl;
  }
 
  {
    matrix m1(10);
    m1.Matr[0][0] = 6;
    matrix m2(0);
    m2 = m1;
 
    const bool isSame1 = m1 == m2;
    const bool isSame2 = m2 == m1;
 
    if (isSame1 && isSame2)
      std::cout << "ok" << std::endl;
    else
      std::cout << "error" << std::endl;
  }
 
 
  return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru