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

Матрица из Колонок определённой длины. Конструктор - C++

Восстановить пароль Регистрация
 
Jelum
0 / 0 / 0
Регистрация: 30.05.2010
Сообщений: 17
05.05.2012, 23:02     Матрица из Колонок определённой длины. Конструктор #1
Нужно создать матрицу содержащую массив элементов класса Колонка. Если брать размер колонки по умолчанию - всё работает, но если потребуется размер не по умолчанию выдаёт кучу ошибок, как мне кажется, воспринимая вызов конструктора как вызов левой функции в операторе new. Как правильно написать конструктор и копирующий конструктор класса Матрица?
Column.h
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
#ifndef _COLUMN_H
#define _COLUMN_H
class Column{
    int *arr;
    unsigned size;
public:
    // builders
    Column(unsigned n = 10) : size(n){ arr = new int[n];};
    Column(const Column &org);
    ~Column() {delete [] arr;};
 
    friend ostream& operator << (ostream &output, const Column &right);
    friend istream& operator >> (istream &input, Column &right);
    
    // operators
    const Column operator + (const Column &right);
    const Column operator - (const Column &right);
    const Column operator * (const int num);
    friend const Column operator * (const int num, Column &left);
    bool operator == (const Column &right) const;
    const Column operator ++ (); // prefix
    const Column operator -- (); // prefix
    const Column operator ++ (int); // postfix
    const Column operator -- (int); // postfix
    Column operator ! ();
    int& operator [] (unsigned index); // for non const
    const int operator [] (unsigned index) const; // for const
    Column& operator = (const Column &right);
    
    // functions
    int getsize() const {return size;};
    };
#endif // _COLUMN_H


Matrix.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "column.h"
class Matrix{
    unsigned size;
    Column *matr;
public:
    Matrix(unsigned cols, unsigned rows);
    Matrix(const Matrix &right);
    ~Matrix() {delete [] matr;};
 
    friend ostream& operator >> (ostream &output, const Matrix& right);
    friend istream& operator << (istream &input, Matrix &left);
 
    const Matrix& operator + (const Matrix &right);
    const Matrix& operator * (const Matrix &right);
    Column& operator [](unsigned index); // for non const
    const Column operator [](unsigned index) const; // for const
    Matrix& operator = (const Matrix &right);
 
    // funcs
    unsigned GetSize() const {return size;};
    };


Matrix.cpp (часть с конструкторами):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cassert>
#include "matrix.h"
 
Matrix::Matrix(unsigned cols = 4, unsigned rows = 4){
    size = cols;
    *matr = new (nothrow) Column(rows)[size];
    }
 
Matrix::Matrix(const Matrix &right){
    size = right.GetSize();
    *matr = new (nothrow) Column(right[0].getsize()) [size];
    assert(matr);
 
    for(int i = 0; i < size; i++)
        *(matr + i) = right[i];
    }


Добавлено через 9 часов 21 минуту
Вопрос ещё актуален
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2012, 23:02     Матрица из Колонок определённой длины. Конструктор
Посмотрите здесь:

C++ Doxygen из определённой папки
Чтение определённой строки. C++
C++ Класс матрица (не работает конструктор копирования)
C++ Удаление и редактирование определённой строки
Удаление определённой строки из файла C++
C++ Конструктор производного класса требует конструктор предка
C++ Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
Разработать класс матрица, конструктор по умолчанию, вывод на экран C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
06.05.2012, 00:06     Матрица из Колонок определённой длины. Конструктор #2
Цитата Сообщение от Jelum Посмотреть сообщение
*matr = new (nothrow) Column(rows)[size];
Вот здесь разыменование ещё не инициализированного указателя (в обоих конструкторах). Не понял, зачем nothrow. И при new[] всегда вызывается конструктор по умолчанию, насколько я помню. Может хранить так?
C++
1
std::vector<Column> matr;
Тогда конструктор будет примерно такой:
C++
1
Matrix::Matrix(unsigned cols = 4, unsigned rows = 4) : matr(cols, Column(rows)) {}
Jelum
0 / 0 / 0
Регистрация: 30.05.2010
Сообщений: 17
08.05.2012, 20:24  [ТС]     Матрица из Колонок определённой длины. Конструктор #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Вот здесь разыменование ещё не инициализированного указателя (в обоих конструкторах). Не понял, зачем nothrow. И при new[] всегда вызывается конструктор по умолчанию, насколько я помню. Может хранить так?
C++
1
std::vector<Column> matr;
Тогда конструктор будет примерно такой:
C++
1
Matrix::Matrix(unsigned cols = 4, unsigned rows = 4) : matr(cols, Column(rows)) {}
Спасибо, помогло)

p.s. new (nothrow) возвращает null если не получилось выделить память
Yandex
Объявления
08.05.2012, 20:24     Матрица из Колонок определённой длины. Конструктор
Ответ Создать тему
Опции темы

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