Страница 3 из 7
.
Добавлено: 01 окт 2009, 13:44
BBB
Airhand писал(а):Класса конечно, ведь в нём происходит инициализация членов.
Компилятор C++, который при инициализации экземпляра класса не вызывает конструктор???
You can not be serious! (c)
Это же основополагающий момент реализации объектной модели в C++!
Re: .
Добавлено: 02 окт 2009, 12:18
Airhand
BBB писал(а):Компилятор C++, который при инициализации экземпляра класса не вызывает конструктор??? You can not be serious! (c)
Это же основополагающий момент реализации объектной модели в C++!
Это не инициализация экземпляра класса, а пока только выделение памяти под него. Напиши так: tWithInt oWithInt = oWithInt(); чтобы небыло кривотолков и мы закрыли этот вопрос.
Re: .
Добавлено: 02 окт 2009, 12:57
BBB
Airhand писал(а):Это не инициализация экземпляра класса, а пока только выделение памяти под него. Напиши так: tWithInt oWithInt = oWithInt(); чтобы небыло кривотолков и мы закрыли этот вопрос.
Пипец! Я в шоке от твоих знаний C++! Причем, не каких-то тонких моментов, а самых базовых вещей.
При объявлении в программе экземпляра класса ВСЕГДА вызывается конструктор. (Очень похоже, что у тебя в голове перемешались C++ и Pascal/Delphi).
О твоем "раз.предложении" я вообще молчу. Оно и на взгляд казалось бредовым (с точки зрения синтаксиса), и компилятор это предположение подтвердил, дав ошибку:
no match for call to `(tWithInt) ()'
Re: .
Добавлено: 02 окт 2009, 16:05
Airhand
BBB
Да, я ошибся на счёт того, что в классах инты зануляются, но ты тоже неправ, когда говоришь:
При объявлении в программе экземпляра класса ВСЕГДА вызывается конструктор.
Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
Re: Помогите Исправить Ошибки в Программе
Добавлено: 07 окт 2009, 17:47
Romeo
" писал(а):tWithInt oWithInt = oWithInt()
O_o
Где такие знания почерпнул?
" писал(а):отложенная компиляция
Первый раз о таком слышу и ни разу не видел в стандарте. Дай ссылочку почитать. Наверное, у тебя должна быть самописная дока по этой теме, так как Google не справился с поиском определения данного словосочетания. Часто, читая твои посты мне кажется, что ты дома в жуткой секретности, скрывшись подальше от посторонних взглядов, упорно пишешь свой собственный компилятор С++, который поддерживает интуитивные конструкции и работает так, как скажет его господин, а не в соответствии с какими-то глупыми стандартами

Re: Помогите Исправить Ошибки в Программе
Добавлено: 08 окт 2009, 11:20
Airhand
Romeo писал(а):
Первый раз о таком слышу и ни разу не видел в стандарте. Дай ссылочку почитать.
Это не ты писал ?
Romeo писал(а):
Всё дело в оптимизации, которую проводит компилятор. Если мы не создадим ни одного объекта некого класса, то дефолтный конструктор для такого класса не будет сгенерирован, как следствие, в случае, когда мы не определили конструктор в классе Sub, синтаксическая ошибка о том, что Denier:

enier не доступен, будет отложена до появления первого объекта типа Sub.
Эко у тебя память отшибло...
Наверное, у тебя должна быть самописная дока по этой теме, так как Google не справился с поиском определения данного словосочетания. Часто, читая твои посты мне кажется, что ты дома в жуткой секретности, скрывшись подальше от посторонних взглядов, упорно пишешь свой собственный компилятор С++, который поддерживает интуитивные конструкции и работает так, как скажет его господин, а не в соответствии с какими-то глупыми стандартами
Не пишу я никакой компилятор, а ты прежде чем других хаять на себя посмотри и вспомни, что ты говорил. Не переходи на личности, а то скатываешся к демагогии.
Re: .
Добавлено: 08 окт 2009, 11:52
BBB
Airhand,
вообще-то, ты и
Romeo пишите о разных вещах:
Airhand писал(а):Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
Romeo писал(а): Если мы не создадим ни одного объекта некого класса
Или поясни, что ты имеешь в виду под "реальныи обращением к экземпляру класса"?
Если, например, я опишу а программе экземпляр некоторого класса, но к этому экземпляру в исх.тексте больше не будет никаких обращений, то что, по твоему, будет происходить?
Т.е. примерно так:
Код: Выделить всё
class tMyClass {
public:
tMyClass () : m_i (14) {}]
Re: .
Добавлено: 08 окт 2009, 13:56
Airhand
BBB писал(а):
Или поясни, что ты имеешь в виду под "реальныи обращением к экземпляру класса"?
Если, например, я опишу а программе экземпляр некоторого класса, но к этому экземпляру в исх.тексте больше не будет никаких обращений, то что, по твоему, будет происходить?
Поясняю: если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального обращения.
Re: .
Добавлено: 08 окт 2009, 14:08
BBB
Airhand писал(а):Поясняю: если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального
обращения.
Т.е. если вернуться к этому моему примеру:
Код: Выделить всё
class tMyClass {
public:
tMyClass ();
private :
int m_i;
};
tMyClass::tMyClass () : m_i (14)
{
// do something here
};
tMyClass oMyClassVar;
// и больше никаких обращений к oMyClass нет.
Правильно ли я понимаю, что ты утверждаешь, что экземпляр oMyClassVar создан не будет и, как следствие, конструктор tMyClass::tMyClass ни разу не вызовется?
Re: Помогите Исправить Ошибки в Программе
Добавлено: 08 окт 2009, 16:04
Airhand
Это так и будет, по крайней мере в 2005 студии. А зачем создаать то, что нигде не используется ?