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

Знакомство с классами, попытка реализации класса матриц - C++

Восстановить пароль Регистрация
 
Alex S
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
18.11.2012, 11:36     Знакомство с классами, попытка реализации класса матриц #1
Собственно выдает следующую вещь
"Необработанное исключение в "0x00411805" в "class_test_inheritance.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc"."
хотелось бы понять почему.
код:

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
#include <iostream>
using namespace std;
 
class Matrix 
{
private:
    int s_columns;
    int s_lines;
    int **matr;
public:
    Matrix(int n, int m);
    ~Matrix();
    //Matrix(Matrix &obj);
    void print();
    void get();
};
 
Matrix::Matrix(int n, int m)
{
    s_lines = n;
    s_columns = m;
    int **matr = new int *[s_lines]; 
    for (int i = 0; i < s_lines; i++) 
        matr[i] = new int [s_columns];
}
 
Matrix::~Matrix()
{
    for (int i = 0; i < s_lines; i++)
        delete [] matr [i];
    delete [] matr;
}
 
void Matrix::print()
{
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
            cout << matr [i][j] << " ";
        cout << endl;
    }
}
 
void Matrix::get()
{
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
        {
            cin >> matr [i][j];
        }
    } 
    
}
 
int main()
{
    system("cls");
    Matrix A(3,4);
    A.get();
    A.print();
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 11:36     Знакомство с классами, попытка реализации класса матриц
Посмотрите здесь:

Отделение интерфейса класса от реализации C++
Отделение интерфейса от реализации класса: компиляция кода реализации C++
работа с классами(как перебрать все объекты класса) C++
C++ Знакомство с наследованием. Вызов конструктора базового класса
Задача с классами. Программа с использованием класса Employee C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
18.11.2012, 12:12     Знакомство с классами, попытка реализации класса матриц #2
22 строка надо
C++
1
matr = new int*[s_lines]
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.11.2012, 12:14     Знакомство с классами, попытка реализации класса матриц #3
конструктор копирования, оператор присвоения
Alex S
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
18.11.2012, 21:29  [ТС]     Знакомство с классами, попытка реализации класса матриц #4
Спс, конструктор копирования дописал, вроде работает. С оператором присвоения не совсем разобрался, получился такой вариант но он работает для одинаковых размеров объектов. Если размеры А задать больше В то возникают ошибки.
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
#include <iostream>
using namespace std;
 
class Matrix 
{
private:
    int s_columns; 
    int s_lines;  
    int **matr; 
public:
    Matrix(int n, int m); 
    ~Matrix(); 
    Matrix(Matrix &obj); 
    Matrix &operator = (const Matrix &obj);
    void print(); 
    void get(); 
};
 
Matrix::Matrix(int n, int m)
{
    s_lines = n;
    s_columns = m;
    
    matr = new int*[s_lines];
    for (int i = 0; i < s_lines; i++) 
        matr[i] = new int [s_columns];
}
 
Matrix::~Matrix()
{
    for (int i = 0; i < s_lines; i++)
        delete [] matr [i];
    delete [] matr;
}
 
void Matrix::print()
{
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
            cout << matr [i][j] << " ";
        cout << endl;
    }
}
 
void Matrix::get()
{
    cout << "Please enter the elements of the matrix: "<< endl;;
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
        {
            cout << "M["<<i<<"]["<<j<<"] = ";
            cin >> matr [i][j];
        }
    } 
}
 
Matrix::Matrix(Matrix &obj)
{
    s_columns = obj.s_columns;
    s_lines = obj.s_lines;
 
    matr = new int*[s_lines];
    for (int i = 0; i < s_lines; i++) 
        matr[i] = new int [s_columns];
 
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
        {
            matr [i][j] = obj.matr[i][j];
        }
    } 
 
}
 
Matrix &Matrix::operator = (const Matrix &obj)
{
    if (this == &obj)
        return *this;
    s_columns = obj.s_columns;
    s_lines = obj.s_lines;
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
        {
            matr [i][j] = obj.matr[i][j];
        }
    } 
    return *this;
}
 
int main()
{
    system("cls");
    Matrix A(3,2);
    A.get(); 
    cout << "A:"<< endl;
    A.print();
    Matrix B(2,2); 
    B.get();
    cout << "B:"<< endl;
    B.print();
    B = A;  
    cout << "posle vipolneniya prisvaivaniya, B:"<< endl;
    B.print();
    system("pause");
    return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.11.2012, 21:37     Знакомство с классами, попытка реализации класса матриц #5
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
Matrix &Matrix::operator = (const Matrix &obj)
{
    if (this == &obj)
        return *this; 
    if ((s_columns != obj.s_columns)||(s_lines != obj.s_lines)){
        for (int i = 0; i < s_lines; i++) 
            delete[] matr[i]
        delete[] matr;
 
        s_columns = obj.s_columns;
        s_lines = obj.s_lines;
 
        matr = new int*[s_lines];
        for (int i = 0; i < s_lines; i++) 
           matr[i] = new int [s_columns];
      }
    for (int i = 0; i < s_lines; i++)
    {
        for (int j = 0; j < s_columns; j++)
        {
            matr [i][j] = obj.matr[i][j];
        }
    } 
    return *this;
}
Yandex
Объявления
18.11.2012, 21:37     Знакомство с классами, попытка реализации класса матриц
Ответ Создать тему
Опции темы

Текущее время: 16:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru