Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2009, 23:46   #1
Новичек89
Новичок
Джуниор
 
Регистрация: 28.06.2009
Сообщений: 4
Восклицание Профи,нужна ваша помощь!!!

Здравствуйте, помогите пожалуйста!!! Мне нужна помощь, и посоветовались обратится к Вам!
Вообщем такая ситуация...
Наш преподаватель по "технологии программирования (СИ++)" требует уже 2й год от студентов ответ, на вопрос "Чем отличается Конструктор от Деструктора?" Ну и при этом нужно назвать их свойства. Мы знаем, и говорим ему : 1) В классе может быть не один конструктор, а деструктор только один. ; 2) Конструктор может иметь аргументы, а деструктор нет; 3) Деструктор не имеет параметров, а конструктору они могут передаваться; 4) Конструктор не может быть виртуальным, а диструктор виртуальный; 5) Они оба называются так же как и класс; 6) Конструктор может быть перегружен, деструктор - нет; 6)Конструктор не возвращает значение, не может быть объявлен, как const,volatile,static; не наследуется, может быть явно/не явно вызван; может быть конструктор копирования; 7) Конструктор выполняется при инициализации объекта, деструктор - после работы программы. 8) Оба могут быть по умолчанию;
Преподаватель говорит, что вы все не называете еще одного отличия. И вот он от нас требует этого отличия, "хоть ты тресни..." =((( Смотрели книги, искали в инете - без рез-та... Помогите, подскажите пожалуйста!!! Этот ответ поможет поскорее сдать этот экзамен...
Очень надеюсь на помощь знающих людей !!!
Конечно дело не в тильде. ...
Спасибо заранее!!!
Новичек89 вне форума Ответить с цитированием
Старый 29.06.2009, 00:01   #2
-HunteR-
Форумчанин
 
Аватар для -HunteR-
 
Регистрация: 04.11.2007
Сообщений: 117
По умолчанию

Названием =)
Перед тем, как выложить код, я его всегда проверяю.
Если помог - тыкни на на весы слева, под аватарой.
-HunteR- вне форума Ответить с цитированием
Старый 29.06.2009, 00:24   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Можно посмотреть в сторону обработки исключений. Исключения выбрасываемые конструктором относительно нормально обрабатываются, а вот при исключениях деструктора как бы не прога вылетала наглухо, но тут надо уточнять, ибо это где-то давно читал, но на практике не проверял
Ну или про вызов конструкторов/деструкторов при наследовании -разница в порядке вызовов "унаследованных" конструкторов/деструкторов, ну и случай с невиртуальный деструктором, когда будет утечка памяти, в случае удаления потомка по указателю на предка.
При желании еще можно что-то заумное накопать, но полюбому окажется какая-нибудь глупость (типа упомянутого мной выше порядка вызовов конструкторов/деструкторов потомков). Кто знает что у этого препода на уме
Ну и еще вспомнил: деструктору доступен объект полностью, а в конструкторе лучше только инициализировать члены класса, т.е. с this работать только на запись, но не на чтение, т.к. к этому моменту объект еще может быть не проинициализирован полностью и черт знает что там будет записано

Последний раз редактировалось pu4koff; 29.06.2009 в 00:38.
pu4koff вне форума Ответить с цитированием
Старый 29.06.2009, 00:25   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

эм, ну хз, может еще тем, что деструктор можно вызвать явно, как член класса? а вообще имхо он вас разводит, чтобы вы больше инфы читали про ооп (в конце действительно скажет - названием) либо там какая то мелочь, которая сама собой подразумевается.
vvviperrr вне форума Ответить с цитированием
Старый 29.06.2009, 00:26   #5
Новичек89
Новичок
Джуниор
 
Регистрация: 28.06.2009
Сообщений: 4
Радость

Если препад был бы приколистом, то это бы прокатило... Но! ( Он не такой ...
А есть более грамотный варианты отличий??? Уже столько литературы перечитала ...
Новичек89 вне форума Ответить с цитированием
Старый 29.06.2009, 00:41   #6
Новичек89
Новичок
Джуниор
 
Регистрация: 28.06.2009
Сообщений: 4
По умолчанию

Поясните пожалуйста, что в данном случаи исключения???
Новичек89 вне форума Ответить с цитированием
Старый 29.06.2009, 01:10   #7
Новичек89
Новичок
Джуниор
 
Регистрация: 28.06.2009
Сообщений: 4
Плохо

Вот это подстава... Разве так делается???
Тут своя, четко сформулированная проблема...
Новичек89 вне форума Ответить с цитированием
Старый 29.06.2009, 09:16   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от Новичек89 Посмотреть сообщение
Поясните пожалуйста, что в данном случаи исключения???
Ну если взять эту заметку и немного подправить код:
Код:
#include <iostream>
#include <conio.h>

using namespace std;

class test
{
public:
	test()
	{
		//throw std::runtime_error("Constructor failed");
	}
	~test()
	{
		throw std::runtime_error("Destructor failed");
	}
};

int main()
{
	try
    {
		test a;

		throw std::runtime_error("Error!");
    }
	catch(std::exception const &e)
	{
		cout << e.what() << endl;
	}
	_getch();
	return 0;
}
В таком виде программа будет "умирать" (по крайней мере при компиляции в MS VS 2008 это так ). Если же раскомментировать выбрасывание исключения в конструкторе, то оно спокойно обработается и программа будет работать корректно (деструктор всё равно вызываться не будет, так что его код можно не трогать).
pu4koff вне форума Ответить с цитированием
Старый 29.06.2009, 09:20   #9
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Конструктор инициализирует, а деструктор освобождает память)))
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 29.06.2009, 09:38   #10
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Ну скажите, что конструктор вызывается при создании объекта, а деструктор при его разрушении . Это одно из главных отличий.

Последний раз редактировалось profi; 29.06.2009 в 18:46.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна ваша помощь.) Linus Паскаль, Turbo Pascal, PascalABC.NET 4 11.05.2009 10:00
нужна ваша помощь! forsy Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2008 14:38