Помогите Исправить Ошибки в Программе

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand писал(а):Класса конечно, ведь в нём происходит инициализация членов.
Компилятор C++, который при инициализации экземпляра класса не вызывает конструктор??? You can not be serious! (c)
Это же основополагающий момент реализации объектной модели в C++!
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB писал(а):Компилятор C++, который при инициализации экземпляра класса не вызывает конструктор??? You can not be serious! (c)
Это же основополагающий момент реализации объектной модели в C++!
Это не инициализация экземпляра класса, а пока только выделение памяти под него. Напиши так: tWithInt oWithInt = oWithInt(); чтобы небыло кривотолков и мы закрыли этот вопрос.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand писал(а):Это не инициализация экземпляра класса, а пока только выделение памяти под него. Напиши так: tWithInt oWithInt = oWithInt(); чтобы небыло кривотолков и мы закрыли этот вопрос.
Пипец! Я в шоке от твоих знаний C++! Причем, не каких-то тонких моментов, а самых базовых вещей.
При объявлении в программе экземпляра класса ВСЕГДА вызывается конструктор. (Очень похоже, что у тебя в голове перемешались C++ и Pascal/Delphi).
О твоем "раз.предложении" я вообще молчу. Оно и на взгляд казалось бредовым (с точки зрения синтаксиса), и компилятор это предположение подтвердил, дав ошибку:
no match for call to `(tWithInt) ()'
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB
Да, я ошибся на счёт того, что в классах инты зануляются, но ты тоже неправ, когда говоришь:
При объявлении в программе экземпляра класса ВСЕГДА вызывается конструктор.
Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):tWithInt oWithInt = oWithInt()
O_o

Где такие знания почерпнул?
&quot писал(а):отложенная компиляция
Первый раз о таком слышу и ни разу не видел в стандарте. Дай ссылочку почитать. Наверное, у тебя должна быть самописная дока по этой теме, так как Google не справился с поиском определения данного словосочетания. Часто, читая твои посты мне кажется, что ты дома в жуткой секретности, скрывшись подальше от посторонних взглядов, упорно пишешь свой собственный компилятор С++, который поддерживает интуитивные конструкции и работает так, как скажет его господин, а не в соответствии с какими-то глупыми стандартами :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а): Первый раз о таком слышу и ни разу не видел в стандарте. Дай ссылочку почитать.
Это не ты писал ?
Romeo писал(а): Всё дело в оптимизации, которую проводит компилятор. Если мы не создадим ни одного объекта некого класса, то дефолтный конструктор для такого класса не будет сгенерирован, как следствие, в случае, когда мы не определили конструктор в классе Sub, синтаксическая ошибка о том, что Denier: :D enier не доступен, будет отложена до появления первого объекта типа Sub.
Эко у тебя память отшибло...

Наверное, у тебя должна быть самописная дока по этой теме, так как Google не справился с поиском определения данного словосочетания. Часто, читая твои посты мне кажется, что ты дома в жуткой секретности, скрывшись подальше от посторонних взглядов, упорно пишешь свой собственный компилятор С++, который поддерживает интуитивные конструкции и работает так, как скажет его господин, а не в соответствии с какими-то глупыми стандартами :)
Не пишу я никакой компилятор, а ты прежде чем других хаять на себя посмотри и вспомни, что ты говорил. Не переходи на личности, а то скатываешся к демагогии.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand,
вообще-то, ты и Romeo пишите о разных вещах:
Airhand писал(а):Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
Romeo писал(а): Если мы не создадим ни одного объекта некого класса
Или поясни, что ты имеешь в виду под "реальныи обращением к экземпляру класса"?

Если, например, я опишу а программе экземпляр некоторого класса, но к этому экземпляру в исх.тексте больше не будет никаких обращений, то что, по твоему, будет происходить?

Т.е. примерно так:

Код: Выделить всё

class tMyClass {
  public:
   tMyClass () : m_i (14) {}]
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB писал(а): Или поясни, что ты имеешь в виду под "реальныи обращением к экземпляру класса"?

Если, например, я опишу а программе экземпляр некоторого класса, но к этому экземпляру в исх.тексте больше не будет никаких обращений, то что, по твоему, будет происходить?
Поясняю: если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального обращения.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand писал(а):Поясняю: если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального
обращения.
Т.е. если вернуться к этому моему примеру:

Код: Выделить всё

class tMyClass {
  public:
   tMyClass ();
  private :
   int m_i;
 };

tMyClass::tMyClass () : m_i (14)
{
  // do something here
};


tMyClass oMyClassVar;

 // и больше никаких обращений к  oMyClass нет.
Правильно ли я понимаю, что ты утверждаешь, что экземпляр oMyClassVar создан не будет и, как следствие, конструктор tMyClass::tMyClass ни разу не вызовется?
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Это так и будет, по крайней мере в 2005 студии. А зачем создаать то, что нигде не используется ?
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Ответить