Форум программистов, компьютерный форум 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 = 0.001; cout << setprecision(20) << a << endl;
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, double * vec); void PryamoiHod(int n, double **a, double *b);
Переделывание структуры в класс [С++] C++
//Библиотеки #include "stdafx.h" #include <conio.h> #include "iostream" #include <string.h> using namespace std; //Объявление структуры (3 поля - отправление, прибытие, номер поезда) struct TRAIN { public:
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 TRAIN { public:
C++ Ошибка при отладке запускаю программный код на отладку в Microsoft Visual C++ 2010 Express. выдает следующую ошибку в чем причина??? подробнее

Показать сообщение отдельно
Fantom.AS
2 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 121

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

10.12.2011, 13:53. Просмотров 1287. Ответов 8
Метки (Все метки)

Пишу свой класс матрица.
В конструкторе копирования вылезла ошибка, решить которую мне не удается.
Отладчиком проходился не один раз, не помогает.

Вот написанный мною код
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
//matrix.h
 
#pragma once
class matrix
{
    double **Matr;
    int size;           //матрица квадратная
public:
    //конструкторы
    matrix(int _N=0);           //умолч + параметр
 
    matrix(const matrix &A);            //копирование
    //деструктор
    ~matrix(void);
 
    //операции
 
    matrix& operator =(const matrix &A);//+
    matrix operator +(const matrix &A);//+
    matrix operator *(const matrix &A);//+
    matrix operator -(const matrix &A);//+
    matrix ObrMatr();//+
    //методы 
    void Show() const;              //вывод матрицы на экран
    void ReadInFile(FILE *f);       //читаем матрицу из файла
    double Element(int i,int j);    //возвращает элемент по заданным координатам
    bool Find(double Item);         //поиск элемента в матрице true - есть, false - нет.  Ищет первое вхождение элемента в матрицу
                                    //i,j - координаты, если эл-т найден. -1,-1 - если не найден.
 
    bool IsDiagonal();              //проверяет, является ли матрица диагональной
    bool IsSimmetr();               //проверяет, является ли матрица симметричной
 
};
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//matrix.cpp
 
#include "StdAfx.h"
#include "matrix.h"
#include <math.h>
 
 
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(void)
{
    size=0;
    delete [] *Matr;
}
matrix::matrix(const matrix &A)         
//копирование - тот самый конструктор, который не рапботает
{
    /*Matr=new double*[size];
    for (int i=0; i<size; i++)
        Matr[i]=new double[size];*/
    size=A.size;
    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)
       return *this;
    size=A.size;
    for (int i=0; i<size; i++)
        for (int j=0; j<size; j++)
        {
            Matr[i][j]=A.Matr[i][j];
        }
    return *this;
}
 
matrix matrix::operator +(const matrix &A)
{
    matrix temp(size);
    temp.size=A.size;
    for (int i=0; i<temp.size; i++)
        for (int j=0; j<temp.size; j++)
        {
            temp.Matr[i][j]=Matr[i][j]+A.Matr[i][j];
        }
    return temp;
}
 
matrix matrix::operator -(const matrix &A)
{
    matrix temp(size);
    temp.size=A.size;
    for (int i=0; i<temp.size; i++)
        for (int j=0; j<temp.size; j++)
        {
            temp.Matr[i][j]=Matr[i][j]-A.Matr[i][j];
        }
    return temp;
}
 
matrix matrix::operator *(const matrix &A)
{
    matrix temp(size);
    for (int i=0; i<size; i++) 
        for (int j=0; j<size; j++) 
        {
            for(int k = 0; k < size; k++)
                temp.Matr[i][j] += (Matr[i][k] * A.Matr[k][j]);
        }
    return temp;
}
 
matrix matrix::ObrMatr()
{
    matrix temp(size);
    return temp;
}
 
 
 
double matrix::DetermGauss()
{  // Метод Гауса
//Прямой ход. В результате получим приведённую к треугольному виду матрицу. 
double det=1.0;
matrix temp(size);
temp=*this;
int L=0; //номер строки
//float max_el=0.0;
//int max_el_row;
//float *tmp_address; //указатель на строку массива (при перестановке строк меняем адрес)
double tmpf=0.0, tmpf2=0.0, t3=0.0;
for (int j=0; j<temp.size; j++)
{
for (int k=1+L; k<temp.size; k++)  //! k=1; L=0,1,2...
{
    tmpf=temp.Matr[k][j]/temp.Matr[L][j];
    for (int i=0; i<=temp.size; i++)
    {
        if (fabs(tmpf)==0) break;
        tmpf2=(temp.Matr[L][i]*tmpf);
        t3=temp.Matr[k][i]-tmpf2;
        temp.Matr[k][i]=t3;
    }
}
L++;
}
    for (int i=0; i<temp.size; i++)
        det*=temp.Matr[i][i];
 
return det;
} 
void matrix::ReadInFile(FILE *f)        //читаем матрицу из файла
{
    for (int i=0; i<size; i++)
        for (int j=0; j<size; j++)
        {
            fscanf(f,"%lf",&Matr[i][j]);
        }
}
 
void matrix::Show() const
{
    printf("\n");
    for (int i=0; i<size; i++)
    {
        for (int j=0; j<size; j++)
        {
            printf("%.3lf  ",Matr[i][j]);
        }
        printf("\n");
    }
}

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
//main.cpp
 
 
#include "stdafx.h"
#include "matrix.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *fi;
    fi=fopen("test//input3.txt","r");
    matrix A(4);
    A.ReadInFile(fi);
    A.Show();
    FILE *f2;
    f2=fopen("test//test1.txt","r");
    matrix B(4);
    B.ReadInFile(f2);
    B.Show();
    matrix C(4);
    
    //C=A-B;
    C.Show();
    fclose(fi); fclose(f2);
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru