|
|
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Плохо знаю С++... А книжки читаю, там таких тонкостей нет... Объясните в следующем объявлении: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. зачем после объявления функции const ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 03:33 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю wrote: > зачем после объявления функции const? Это означает, что функция не меняет состояния класса ни при каких условиях. Это позволяет вызывать её из константного указателя на класс. Кстати, об этом отлично рассказано во встроенной справке Visual Studio (статьи находятся по слову "const"). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 03:44 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Ок. Почитаю. Спасибо... Еще вопрос, навернео совсем простой. Про ссылки и указатели. Ну никак не могу понять! Например я объявляю переменную: Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. Код: plaintext Речь идет о библиотеке QT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 04:47 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю wrote: > Я понимаю, что переменная pd, это адрес экземпляра класса.... И для неё я > могу вызвать метод show(), воспользовавшись конструкцией: > Тогда что такое переменная d?? Это экземпляр класса, находящийся в стеке программы > Я могу чем то её заполнить имея pd? Да. d = *pd. Но лучше в документацию сначала залезть и посмотерть по поводу присваивания и т.д. Насколько помню, большинство классов Qt заточены под передачу по значению (т.е. можно возвратить в функции экземпляр класса, а не указатель на класса), так что проблем не должно быть. > И почему я не могу вызвать для неё d.show(); ? Это почему это? Программу, строчку и сообщение об ошибке в студию. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 05:53 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю wrote: > А книжки читаю, там таких тонкостей нет... У строуструпа такое должно быть. Гарантии не даю. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 05:56 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErV > И почему я не могу вызвать для неё d.show(); ? Это почему это? Программу, строчку и сообщение об ошибке в студию. Вызвать не могу, потому что не могу присвоить: Код: plaintext 1. 2. Говорит, что оператор = private: Код: plaintext 1. 2. А зачем так сделано то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 06:30 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErV > Тогда что такое переменная d?? Это экземпляр класса, находящийся в стеке программы А можно сказать так: d: - это потенциально адрес экземпляра класса (начальной точки, первого байта массива памяти), память под который будет выделена в куче ? А pd, это тогда адрес некой другой ячейки памяти, в которой уже в свою очередь хранится адрес на начальную точку экземпляра класса QDialog. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 06:51 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErV Непонимаю wrote: > А книжки читаю, там таких тонкостей нет... У строуструпа такое должно быть. Гарантии не даю. Posted via ActualForum NNTP Server 1.4 У Саттера и Майерса стопроцентно есть Уж и не знаю что за КНИЖКИ читает автор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 08:26 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
я кажется догадался... все переменные помещаются в стеке и занимат столько места в стеке сколько весит объект, который они представляют. Например, если на хранение QDialog нужно 200 байт со всеми полями... (а кстати, таблица функций и тем более их исполняемый код в каждый экземпляр не копируется же?), то в стеке будет отведено именно 200 байт на это дело. Если это Int, то будет 4 байта, и так далее. Если объявляется ссылка на.. что то то в стеке выделится ровно место для хранения адреса и все. А место под сам объект выделяется в куче. ПравильНо?? А в QT запретили передачу по значению чтобы не закакивали стек. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 08:33 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)У Саттера и Майерса стопроцентно есть Уж и не знаю что за КНИЖКИ читает автор Две нашел для начинающих... На 600 страниц растянута манная каша про оператор for while и объявление переменных. И Страутструп тоже такой фигней страдает. Его вообще тяжело читать. Саттер ии Маерс... Угу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 08:36 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю Две нашел для начинающих... И НИКОГДА не читайте перед едой советских газет !!! (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 08:56 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю Gluk (Kazan)У Саттера и Майерса стопроцентно есть Уж и не знаю что за КНИЖКИ читает автор Две нашел для начинающих... На 600 страниц растянута манная каша про оператор for while и объявление переменных. И Страутструп тоже такой фигней страдает. Его вообще тяжело читать. Саттер ии Маерс... Угу 1) Ну не надо так про Страуструпа :-) Отличная книга, все в ней написано. 2) Не путайте, главное, в самом начале значения понятий "ссылка" и "указатель". Например если переменная заведена в стэке (int a) - то чтобы передать ее в функцию, требующую указатель - вы передаете &a (взятие адреса/передача по ссылке). в int *a уже хранится адрес, т.к. это указатель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 09:01 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
tAZAR 1) Ну не надо так про Страуструпа :-) Отличная книга, все в ней написано. Видимо дело вкуса. В электронном виде можно посмотреть Саттера где-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 09:39 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю ErV > И почему я не могу вызвать для неё d.show(); ? Это почему это? Программу, строчку и сообщение об ошибке в студию. Вызвать не могу, потому что не могу присвоить: Код: plaintext 1. 2. Говорит, что оператор = private: Код: plaintext 1. 2. А зачем так сделано то? Для этого и сделано. Чтобы не возможно было присвоить один диалог другому. По всей видимости, диалог не может обладать логически и/или физически правельно операцией присваивания. Скорее всего заблокирован и копирующий конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 09:40 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаюя кажется догадался... все переменные помещаются в стеке и занимат столько места в стеке сколько весит объект, который они представляют. Например, если на хранение QDialog нужно 200 байт со всеми полями... (а кстати, таблица функций и тем более их исполняемый код в каждый экземпляр не копируется же?), угу. Непонимаю то в стеке будет отведено именно 200 байт на это дело. Если это Int, то будет 4 байта, и так далее. Если объявляется ссылка на.. что то то в стеке выделится ровно место для хранения адреса и все. А место под сам объект выделяется в куче. ПравильНо?? да. Непонимаю А в QT запретили передачу по значению чтобы не закакивали стек. ? Врядли. В asp10 для одного потока выделяется 10 метров стека. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 09:44 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю Gluk (Kazan)У Саттера и Майерса стопроцентно есть Уж и не знаю что за КНИЖКИ читает автор Две нашел для начинающих... На 600 страниц растянута манная каша про оператор for while и объявление переменных. И Страутструп тоже такой фигней страдает. Его вообще тяжело читать. Саттер ии Маерс... Угу Ну, это плохие авторы. Про синтаксис языка, я бы предпочел лаконичное изложение. Страуструпа, обычно, на философию (размышления) тянет. Эти книги желательно читать, когда уже есть хорошее представление о языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 09:47 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
AkhНу, это плохие авторы. На мой вкус хорошие а о вкусах как известно не спорят Не все книги должны быть похожи на расписание пригородных поездов P.S. Крокодил Гена любил читать умные книги (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 09:49 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Akh Страуструпа, обычно, на философию (размышления) тянет. Вот именно это и раздражает. Еще момент не понимаю. 1) В каком случае функцию можно вызвать вот так ? : Код: plaintext 1. насколько я видел в объявлении функции, которая потом вызывается таким образом слова static нет. 2) Есть ли разница между функциями объявляемыми внутри класса (внутри {} относящихся к объявлению класса) и функциями объявляемыми пожже в любом месте со значком :: Например: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 10:00 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
1. В том который Вы показали тут дело не в определении метода а в том как создается класс на стеке или куче (и соответственно осуществляется доступ через указатель или нет) static ТУТ не при чем 2. есть, но очччень маленькая они inline ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 10:19 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) AkhНу, это плохие авторы. На мой вкус хорошие а о вкусах как известно не спорят Не все книги должны быть похожи на расписание пригородных поездов P.S. Крокодил Гена любил читать умные книги (с) ты меня не понял. Сообщение автора было из 3-х утверждений, я привел 3 довода по этим утверждениям. Соотвтетсвенно, это относилось к автору, который for расписал на 600 страниц. Саттер и Маейерс, содержат много полезного. У меня они были как подготовительный этап, т.е. отточка использования конструкций(синтаксиса?) языка, для изучения проектных решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 10:29 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю Еще момент не понимаю. 1) В каком случае функцию можно вызвать вот так ? : Код: plaintext 1. насколько я видел в объявлении функции, которая потом вызывается таким образом слова static нет. Таким образом вызываются как раз не статик методы класса. Статик методы можно вызывать без указания конкретного экземляра (в этом случае u). Статик вы можете вызвать так: Код: plaintext 1. Т.е. вам не нужен конкретный экземляр. Непонимаю 2) Есть ли разница между функциями объявляемыми внутри класса (внутри {} относящихся к объявлению класса) и функциями объявляемыми пожже в любом месте со значком :: Например: Код: plaintext 1. 2. 3. 4. Для самого метода - нет. Разница в использвовании. Допустим вы хотите скрыть реализацию, что бы не перекомпиливались все модули использующие данных класс, при модификации реализации функции или чтобы не было копий реализаций в модулях их использующих. Обычно, реализацию выносят в cpp-файл, за исключением, как сказал Gluk, inline, а также шаблонных методов или методов шаблонных классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 10:39 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю 2) Есть ли разница между функциями объявляемыми внутри класса (внутри {} относящихся к объявлению класса) и функциями объявляемыми пожже в любом месте со значком :: Например: Код: plaintext 1. 2. 3. 4. Правила хорошего тона. Обычно в хидерах описывают только inline функции, остальные выносят в файл реализации.. Насчет книг еще: Александреску? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 10:49 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
tAZARНасчет книг еще: Александреску? Не рановато ли человеку не умеющему работать с ООП? Александреску, имхо, следует проходить после GoF(или хотябы дорости до уровня, что можно свободно читать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 10:52 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Akhты меня не понял. Сообщение автора было из 3-х утверждений, я привел 3 довода по этим утверждениям. Соотвтетсвенно, это относилось к автору, который for расписал на 600 страниц. Саттер и Маейерс, содержат много полезного. У меня они были как подготовительный этап, т.е. отточка использования конструкций(синтаксиса?) языка, для изучения проектных решений. ага, понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 11:06 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
tAZARНасчет книг еще: Александреску? слишком жестоко для новичка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 11:12 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
const после нестатической функции-мембера класса Some означает, что в этой функции указатель this объявляется не как Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 11:13 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) tAZARНасчет книг еще: Александреску? слишком жестоко для новичка :) Писал с опаской :-) Просто чтобы человек и о такой знал.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 11:13 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
MasterZivconst после нестатической функции-мембера класса Some означает, что в этой функции указатель this объявляется не как Код: plaintext 1. Код: plaintext 1. Вместь "не так, а как", надо "так или так". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 11:16 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Akh tAZARНасчет книг еще: Александреску? Не рановато ли человеку не умеющему работать с ООП? Александреску, имхо, следует проходить после GoF(или хотябы дорости до уровня, что можно свободно читать). Со стороны виднее. Может и не умею работать с ООП, но вообще я из Delphi, С#... там таких заморочек нет. Там не приходится думать, где ты сейчас - в стеке или в куче... Чтобы вызвать метод, по крайней мере объект класса должен быть инициализирован. Само объявление переменной типа (пользуюсь нотацией С++): Код: plaintext Ничего кроме null не дает... Т.е. - однозначно память под экземпляр не отводится, указатель = null/ Попытаться вызывать некий метод до инициализации... Не пробовал! А может и пробовал, но компилятор быстро отбил эту привычку. Не помню. Там просто нета такой практики... не принято. Использовал static если была нужна функция без экземпляра. Вместо передачи значения по ссылке используется var или out (C#). И сразу понятно что к чему.. Пошел в книжный. Очень понравилась QT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 12:36 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
НепонимаюСо стороны виднее. Может и не умею работать с ООП, но вообще я из Delphi, С#... там таких заморочек нет. Там не приходится думать, где ты сейчас - в стеке или в куче... Чтобы вызвать метод, по крайней мере объект класса должен быть инициализирован. Само объявление переменной типа (пользуюсь нотацией С++): Код: plaintext Ничего кроме null не дает... Т.е. - однозначно память под экземпляр не отводится, указатель = null/ Попытаться вызывать некий метод до инициализации... Не пробовал! А может и пробовал, но компилятор быстро отбил эту привычку. Не помню. Там просто нета такой практики... не принято. В C# компилятор на такое объявление и попытку потом использовать объект вывалит ошибку попытки использования неинициализированной переменной. ООП там валом, и разобраться с ним нужно было еще там :-) Кстати, указателей там тоже нет (в чистом managed code).. А Qt - да, хорошая вещь :-) К студии дебаггер не прикрутил. Вернулся пока на последний билд Code::Blocks, блин, еще б туда рефакторинг. :-( Хоть на emacs переходи.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 12:55 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю Akh Александреску, имхо, следует проходить после GoF(или хотябы дорости до уровня, что можно свободно читать). Со стороны виднее. Может и не умею работать с ООП, но вообще я из Delphi, С#... там таких заморочек нет. Там не приходится думать, где ты сейчас - в стеке или в куче... Чтобы вызвать метод, по крайней мере объект класса должен быть инициализирован. Само объявление переменной типа (пользуюсь нотацией С++): Код: plaintext Ничего кроме null не дает... Т.е. - однозначно память под экземпляр не отводится, указатель = null/ Попытаться вызывать некий метод до инициализации... Не пробовал! А может и пробовал, но компилятор быстро отбил эту привычку. Не помню. Там просто нета такой практики... не принято. Использовал static если была нужна функция без экземпляра. Вместо передачи значения по ссылке используется var или out (C#). И сразу понятно что к чему.. Пошел в книжный. Очень понравилась QT. Тогда - уметь работать с классами в С++. Ваш пример в С++ уже определил рабочий объект "e" класса "SomeClass". Он инициализирован конструктором по умолчанию. SomeClass::SomeClass(). Если вы такой конструктор для класса не определяли, то компилятор его создаст сам. Все свойства класса, также будут инициализированны кострукторами по умолчанию. Это элементарные правила. Сначала надо вникнуть в них. Это я и имел виду, только слишком обощил на все ООП, не зная, что у вас опыт в других языках есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 13:23 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
НепонимаюТам не приходится думать, где ты сейчас - в стеке или в куче... В C++ об этом думать приходится и это хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 13:35 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Вот удачная книга, про const - очень подробно :) Джефф Элджер "C++ Библиотека программиста". Только для новичка сложновато может быть. Скачать можно тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 13:43 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
МиВот удачная книга, про const - очень подробно :) Джефф Элджер "C++ Библиотека программиста". Только для новичка сложновато может быть. Скачать можно тут На мой взгляд не слишком удачная. Много апломба ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 14:01 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю wrote: > Вызвать не могу, потому что не могу присвоить: > QDialog* pd; //9 > pd = new QDialog(); //10 > d = *pd; // -- вот здесь //11 Значит, так делать нельзя. Создавайте сразу с конструктором: QDialog d(параметры); > Говорит, что оператор = private: >А зачем так сделано то? Очевидно, что реализация не позволяет его копировать, и конструктор в private запихнут чтобы это явно запретить, например. >А можно сказать так: >d: - это потенциально адрес экземпляра класса (начальной точки, первого >байта массива памяти), память под который будет выделена в куче ? Нельзя, потому что память под него УЖЕ выделена, и выделена в стеке. Статически, так сказать >Если объявляется ссылка на.. что то то в стеке выделится ровно место для >хранения адреса и все. >А место под сам объект выделяется в куче. >ПравильНо?? Почти. ссылка может указывать на объект в стеке. >А в QT запретили передачу по значению чтобы не закакивали стек. ?. Не вижу связи. Там очень много классов, которые можно передавать по значению. QImage, например, QString и т.д. Там специально реализация сделана так, чтобы предотвратить излишнее дублирование одинаковых строк и т.д. и т.п. >Две нашел для начинающих... На 600 страниц растянута манная каша про >оператор for while и объявление переменных. (пожимает плечами) >И Страутструп тоже такой фигней страдает. Его вообще тяжело читать. Зато у него расписаны все возможности языка. Когда учил, к книжке долго обращался, пока не выучил, как объявлять typedef'ом указатель а фукнцию. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 17:23 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Akh wrote: > Врядли. В asp10 для одного потока выделяется 10 метров стека. :) Тут тонкость есть. под Windows стек динамически расти (т.е. увеличивать свой максимально возможный размер) не может, под *nix'ом, как я понимаю - может. Из-за этого есть проблемы, например, с Open Dynamics Engine под виндой... Непонимаю wrote: > 1) В каком случае функцию можно вызвать вот так ? : В любом. >2) Есть ли разница между функциями объявляемыми внутри класса (внутри {} >относящихся к объявлению класса) и функциями объявляемыми пожже в любом >месте со значком :: Функцию класса нельзя объявить за пределами класса. НО можно разместить объявление фукнции (т.е. int asdf();) внутри класса, а реализацию засунуть в другое место. >Со стороны виднее. Может и не умею работать с ООП, но вообще я из Delphi, >С#... там таких заморочек нет. Там не приходится думать, где ты сейчас - в >стеке или в куче... Вообще-то, смотря как работать. Иногда очень даже приходится. Ну и плюс - это дельфийские классы позвляют иногда об этом забыть, так как, фактически, являютсяуказателями. А вот объект (пришедшие из паскаля), помнится, можно и в стек засунуть... >Чтобы вызвать метод, по крайней мере объект класса должен быть >инициализирован. Само объявление переменной типа (пользуюсь нотацией С++): А как насчет Дельфйиского ClassName, например? помнится, она и несколько других функций (GetInstanceSize, вроде бы) могут быть вызваны без экземпляра класса. >Ничего кроме null не дает... Т.е. - однозначно память под экземпляр не >тводится, указатель = null/ Он не может быть "null". И память в стеке не может быть НЕ выделена. Приведите полный проблемный код. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 17:31 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErV Akh wrote: > Врядли. В asp10 для одного потока выделяется 10 метров стека. :) Тут тонкость есть. под Windows стек динамически расти (т.е. увеличивать свой максимально возможный размер) не может, под *nix'ом, как я понимаю - может. Из-за этого есть проблемы, например, с Open Dynamics Engine под виндой... Ну, а объекты-то в стеке создавать можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 17:57 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Akh wrote: > Ну, а объекты-то в стеке создавать можно? Можно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2007, 19:43 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErV >Чтобы вызвать метод, по крайней мере объект класса должен быть >инициализирован. Само объявление переменной типа (пользуюсь нотацией С++): А как насчет Дельфйиского ClassName, например? помнится, она и несколько других функций (GetInstanceSize, вроде бы) могут быть вызваны без экземпляра класса. >Ничего кроме null не дает... Т.е. - однозначно память под экземпляр не >тводится, указатель = null/ Он не может быть "null". И память в стеке не может быть НЕ выделена. Приведите полный проблемный код. Да проблем то никаких. В Delphi, например я и не задумывался о неявной инициализации, потому как там она не имеля смысла просто. Но кстати, все написанное заставило задуматься и провести ряд экспериментов дома. Итак... проверка на nil объявленной переменной. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код после then НЕ выполняется. Второй ShowMessage кажет 536. Третий ShowMessage кажет 748 . Что происходит? Видимо объявление var таки запускает некий конструктор по умолчанию... Явное присвоение меняет значение f (адрес становится другой - я проверял). Куда же деваются первые 536 байт выделенные под f при объявлении? Ну... видимо болтаются в стеке пока не произойдет выход из процедуры. Дальше... Объявим f как поле класса TForm1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Отрабатывает первый ShowMessage после then! Таким образом, поле класса НЕ инициализируется конструктором по умолчанию... А как это происходит в C++?! Так же? Я говорю -никогда не задумывался над этими тонкостями, потому что всегда действовал по схеме: Объявление->Инициализация->Использование. Далее еще интереснее - безусловно Второй ShowMessage отрабатывает и показывает 748 байт, но! если сделать вот так: Код: plaintext 1. 2. 3. 4. 5. ... то не выбрасывается ни первый , ни второй ShowMessage, а сразу вываливается runtime ошибка AccessViolation. Такое впечатление, что перед выполнением процедуры Delphi как бы просматривает код вперед и пытается вычислить выражения заранее и дойдя до второго натыкается на отсутствующий объект. Вот такие темные углы компиляции... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 04:30 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Начинаюпонимать wrote: > var f: TForm2; > begin > if f=nil then ShowMessage('11'); Можно вопрос? А почему вы, собственно, решили, что в неинициализированной переменной будет nil? Там указатель "в никуда", мусор, на самом деле. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 14:47 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Начинаюпонимать А как это происходит в C++?! Так же? нет. поле имеющее не тривиальный конструктор по умолчанию будет им "проинициализировано". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 18:50 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
МиВот удачная книга, про const - очень подробно :) Джефф Элджер "C++ Библиотека программиста". Только для новичка сложновато может быть. Скачать можно тут http://proklondike.com Офигенный ресурс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 02:34 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
МиВот удачная книга, про const - очень подробно :) Джефф Элджер "C++ Библиотека программиста". Только для новичка сложновато может быть. Скачать можно тут И кстати, действительно, это то что я искал. Без воды по с тысячеразным объяснением что такое переменная и как ветвится программа объясняется самая соль. Самые проблемные места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 06:44 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErV Akh wrote: > Ну, а объекты-то в стеке создавать можно? Можно. Ну, вот. Тогда это не последовательное предположение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 09:41 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Что подразумевается под объявлением: int &j; и что потом можно сделать с этой переменной ваще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 03:46 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
Непонимаю wrote: > Что подразумевается под объявлением: > > int &j > > и что потом можно сделать с этой переменной ваще? > Опять? Это уже обсуждалось. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 13:25 |
|
||
|
Объясните по синтаксису С++
|
|||
|---|---|---|---|
|
#18+
ErVОпять? Это уже обсуждалось. Чукча не читатель, чукча писатель. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 13:33 |
|
||
|
|

start [/forum/search_topic.php?author=CuMnCoH&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
187ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 625ms |
| total: | 939ms |

| 0 / 0 |
