powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация класса для работы с матрицами целых чисел
12 сообщений из 37, страница 2 из 2
Реализация класса для работы с матрицами целых чисел
    #38070560
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovOksanaVDв дальнейшим автором используется конструктор копии при сложении, вычитании
и умножении матриц
В упор не вижу чтобы он там использовался. Ткните пальцем в строчку.
А я вижу. То есть, Вы серьёзно?!

авторЯ все равно не понимаю, что оставить, а что выкинуть. Если я оставляю конструктор создания квадратной матрицы по ее размеру, то выкинуть конструктор по умолчанию? Не могу понять, нужен ли конструктор копии(Почему я не люблю термин "конструктор по умолчанию": их два.
Если Вы не создали конструктора без параметров, его автоматически создаёт компилятор. Такой автоматически созданный конструктор инициализирует все поля класса нулями (сразу вопрос на понимание: сколько полей у класса QMatrix и чему они будут равны при создании объекта таким конструктором?). Этот конструктор вызывается всякий раз при создании объекта класса QMatrix без параметров. Например, здесь:
Код: plaintext
1.
QMatrix m; //Вызван конструктор без параметров


Если Вы не создали конструктор копирования - его тоже создаст компилятор. Такой автоматический конструктор будет тупо побитово копировать поля "образца". Этот конструктор вызывается в тех случаях, когда компилятору нужно "скопировать" объект класса. Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
QMatrix f(void){
  QMatrix a, b; //Конструктор без параметров
  QMatrix c=a; //Конструктор копирования
  QMatrix d(a); //Тоже конструктор копирования
  //...
  return b; //И здесь тоже - копируется локальная переменная b в "результат" вызова функции
}


Так вот, конструктор без параметров, в принципе, можно не переопределять вовсе (вопрос на понимание: почему? используйте тот факт, что применение delete[] к нулевому указателю не приводит к ошибке, а просто не делает ничего). Тем более его можно не переопределять, если есть железная гарантия того, что его не вызовет никто посторонний (вопрос на понимание: как добиться этой гарантии средствами языка C++?). А вот конструктор копирования - совсем другой разговор. Ведь один из членов класса QMatrix - указатель на некоторую область памяти. Если копия будет указывать на ту же область, то при разрушении копии вызовется delete[] и оригинал внезапно окажется с недействительным указателем на руках. Простейший способ предотвращения такой ситуации - при копировании выделить для копии свой собственный блок памяти, бережно скопировать в него все данные - и копия станет полностью независима от породившего её образца.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070565
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDDimitry Sibiryakov,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
QMatrix QMatrix :: operator + ( const Matrix& ob) // сумма матриц 
{  
    QMatrix temp;                        // реализовано с помощью временного объекта
... 
    return temp;
 
} 




Это не временный объект, а самый что ни на, есть постоянный.
У временного объектов нет имени.


оксанаДПервая строчка

Да нет, как раз к первая, а последняя.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070567
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Operator + должен быть const
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070620
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVD,

Можно взять что-то из топика http://www.sql.ru/forum/actualthread.aspx?tid=975096 и заменить double на int.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070856
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class QMatrix: public Matrix:  
{
public:  
    
    QMatrix(int ) // конструктор создания квадратной матрицы по ее размеру
    QMatrix(const QMatrix& ob) // конструктор копии
    ~QMatrix() // деструктор 
    QMatrix operator + (const Matrix&) 
    QMatrix operator = (const Matrix&) 
    QMatrix operator - (const Matrix& ) 
    QMatrix operator * (const Matrix& ) 


http://padabum.com/data/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/%D0%90%D0%BD%D0%B4%D1%80%D0%B8%D0%B0%D0%BD%D0%BE%D0%B2%D0%B0%20%D0%90.%D0%90%2C%20%D0%98%D1%81%D0%BC%D0%B0%D0%B3%D0%B8%D0%BB%D0%BE%D0%B2%20%D0%9B.%D0%9D.%2C%20%D0%9C%D1%83%D1%85%D1%82%D0%B0%D1%80%D0%BE%D0%B2%D0%B0%20%D0%A2.%D0%9C.%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE%20%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B0%20C%2B%2B%20%282010%29.pdf -это книга, на которую я опираюсь. Посмотрите стр. 146. Там последнее предложение перед программой говорит о операторе присваивания. Как я поняла, мне он нужен.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070897
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVD,

И да и нет. То есть, да: оператор присваивания тоже генерируется по умолчанию, если его не определили явно и тоже копирует все члены побитово, что тоже создаёт проблемы с указателями (потому что копии чисел независимы, а копии указателей - совсем даже наоборот).
Но вместе с тем, в примере из книги создаётся не "самостоятельный" класс квадратных матриц произвольного размера, а берётся (видимо, созданный раньше) класс произвольных матриц и в нём выделяется подкласс квадратных. Это влечёт излишние для Вашей задачи хвосты, вроде различных переменных для числа строк и числа столбцов, или, скажем, вызова перегруженного метода для базового класса, как в примере на странице 146.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070915
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction, ага. Что-то начала понимать)))) Т. е. оставляю, присланный ранее, код без изменений?
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070981
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDAbstraction, ага. Что-то начала понимать)))) Т. е. оставляю, присланный ранее, код без изменений?Ну, главный вопрос - что у Вас в коде затесался идентификатор Matrix. Который здесь не нужен, да и пытаться разобраться одновременно с понятием класса, методами, перегрузкой операторов, и ещё с наследованием - по-моему, перебор.

"Присланный ранее" - в этом сообщении 13596420 ? Ну, с откомментированными строками в нём вроде разобрались (напоминаю: хорошо бы метод Enter либо переименовать, либо переделать реализацию - сейчас одно другому не соответствует).
Что же до некоторых иных строк - гм... Я правильно понимаю, что код, приведённый Вами в первом сообщении темы, компилятор отказывается компилировать и выводит сообщения вида "Ошибка NNNN в строке XX: ******"?
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38071027
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class QMatrix: public Matrix:  
{
public:  
    
    QMatrix(int ) // конструктор создания квадратной матрицы по ее размеру
    QMatrix(const QMatrix& ob) // конструктор копии
    ~QMatrix() // деструктор 
    randomize();
    QMatrix operator + (const Matrix&) 
    QMatrix operator = (const Matrix&) 
    QMatrix operator - (const Matrix& ) 
    QMatrix operator * (const Matrix& ) 



Про идентификатор Matrix - это где?
авторЯ правильно понимаю, что код, приведённый Вами в первом сообщении темы, компилятор отказывается компилировать и выводит сообщения вида "Ошибка NNNN в строке XX: ******"?
Да
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38071075
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVD,

Ну, есть мнение, что надо бы привести пример сообщения об ошибке, а равно и строку, к которой это сообщение относится.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38071223
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, поможет ли (поздновато вмешиваюсь), но кое-что отсюда может помочь:
http://thebaga.blogspot.ru/2012/09/c.html
http://thebaga.blogspot.ru/2012/10/c-1d.html

Правда, для вашей задачи потребуется перенести выделение памяти в конструктор (а не считать, что кто-то добрый сделал за нас эту работу), освобождение - в деструктор. Ну и определить требуемое для работы - конструктор копирования, нужные для реализации мат. действий операторы и вывод на печать...
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38074302
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BagaBaga, спасибо.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация класса для работы с матрицами целых чисел
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]