2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
|
||||||
1 | ||||||
конструкторы14.09.2010, 19:29. Показов 3008. Ответов 36
Метки нет (Все метки)
Есть 2 проблемы:
1) Сказали сделать 2 конструктора: один по умолчанию, а другой-с параметрами. Какие должны быть параметры в моем конструкторе?(я так понимаю нужно как-то избавиться от private:i,j,n,m?) 2) Почему при данном выделении памяти( через malloc нужно по условию) "ложится" метод print(); Может для этого нужен конструктор копирования?
0
|
14.09.2010, 19:29 | |
Ответы с готовыми решениями:
36
Конструкторы Конструкторы С++ Конструкторы Конструкторы |
Каратель
|
|
14.09.2010, 19:56 | 2 |
Добавлено через 3 минуты вот пример
0
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
||||||
14.09.2010, 23:03 | 3 | |||||
ошибочное мнение
0
|
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
|
||||||
14.09.2010, 23:19 [ТС] | 4 | |||||
Не, я имею в виду конкретный свой случай.
Т.е. я создаю конструктор по умолчанию(простой), а потом с параметром. Но при запуске, видя один объект(matrix object), он запустит консторуктор по умолчанию(простой), а как же сделать так, чтобы полсе запуска простого, запустился конструктор с параметром,который вводит матрицу???
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
14.09.2010, 23:21 | 5 | |||||
zhenya.ya,
0
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|||||||||||
14.09.2010, 23:22 | 7 | ||||||||||
вот пример использования перегруженного конструктора:
0
|
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
|
|
15.09.2010, 00:16 [ТС] | 8 |
спс за примеры, но теперь ругается на метод print(), а точнее на строку: cout<<matrica[i][j]<<' ';
Что не так? И кстати, я не понял как сработает конструктор копирования ( непонятно как можно прировнять оъекты, если мой копирующий конструктор написан верно,а я там выделяю память для матрицы, то какие объекты мне нужно приравнять?)
0
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|
15.09.2010, 01:41 | 9 |
добавьте в конструктор копирования проверку, если есть матрица matrica то её нужно удалить и создать новую, вообще при копировании объектов копируются все поля класса.
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
15.09.2010, 09:50 | 10 | |||||
Конструктор копирования срабатывает при инициализации объекта другим обектом того же типа. Примеры:
0
|
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
|
|
15.09.2010, 12:28 | 11 |
А зачем? Если используется конструктор копирования, то при это просто создается новый объект со значениями того объекта, которому приравнивается, и matrica по определению не существует...
Проверка нужна при перегрузке operator=...
0
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|
15.09.2010, 12:53 | 12 |
Если вы используете в классе динамические массивы или работаете с динамической памятью и перегружаете оператор = то обязательно нужен конструктор копирование в котором реализована проверка есть ли такой динамический массив или нет. Представьте что вы приравняли 2 объекта друг другу и у обоих объектов динамический массив с одним и тем же адресом, что будет когда начнет работать деструктор как вы думаете?
0
|
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
|
|
15.09.2010, 13:41 | 13 |
В случае с оператором = безусловно надо делать проверку, но вот в случае с конструктором копирования я не пойму зачем...
Ввиду того, что это конструктор, ранее объект, который инициализируется другим объектом, не существовал, следовательно члены класса не имели никаких значений и проверка всегда будет отрицательной.
0
|
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
|
|
15.09.2010, 20:49 [ТС] | 15 |
Мне ничего не нужно перегружать.
Почему ругается на строку cout<<matrica[i][j]<<' '; в методе-выводе(print() ? И как заставить мой конструктор копирования работать?
0
|
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
|
||||||
15.09.2010, 21:03 [ТС] | 17 | |||||
Все, исправил инициализацию. Но теперь ,по завершению работы ,кидает ошибку. В чем проблема?
0
|
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
|
|
15.09.2010, 21:57 [ТС] | 19 |
Как-то я не могу найти этот случай.
Мне пока еще нельзя вызывать эту штуку. А разьве нельзя применить тут констр. копирования? В задании было сказано сделать конструктор копирования, т.к без него не может работать код.
0
|
15.09.2010, 22:03 | 20 | ||||||||||
Конструктор копирования будет вызван только в случае инициализации объектом такого же типа.
То есть,
Во время удаления этого объекта вызывается free для указателя, который указывает неизвестно куда.
0
|
15.09.2010, 22:03 | |
15.09.2010, 22:03 | |
Помогаю со студенческими работами здесь
20
конструкторы Конструкторы С++ Конструкторы Конструкторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |