|
|
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход. Я хочу заметить, что " использование префиксов " в С не может решить данную проблему. Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек. Почему не может ? Я думал что как раз наоборот, решает. Например, имена всех переменных из библиотек Си начинаются с префикса _, более того, в стандарте де-факто оговаривается этот факт. Де-факто, потому что как мы убедились ранее это закон можно нарушить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:06 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Марк, зачитался вашей пламенной речью :) У Анатолия странный класс. Спасибо всем за советы C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:17 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Кстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:24 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. class definition - определение, интерфейс типа данных определенного пользователем 2. class declaration - объявление, интерфейс типа данных определённого пользователем 3. representation - представлениея, реализация типа данных определенного пользователемну, он же там пишет, прямо где ты выделил, что по историческим резонам, бла-бла-бла первое - это синоним второго. Что, впрочем, в русскоязычной традиции совсем не так. Я, например, привык, что definition - это то, что он здесь назвал repsentation, причём последний термин для меня новость ))). Стандарт надо смотреть, на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:35 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?мне нравится термин "тип", потому что в С++ это действительно - тип, с полностью определяемой семантикой, в том числе и за счёт того, что можно переопределить необходимые операторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:38 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercury1. class definition - определение, интерфейс типа данных определенного пользователем 2. class declaration - объявление, интерфейс типа данных определённого пользователем 3. representation - представлениея, реализация типа данных определенного пользователемну, он же там пишет, прямо где ты выделил, что по историческим резонам, бла-бла-бла первое - это синоним второго. Что, впрочем, в русскоязычной традиции совсем не так. Я, например, привык, что definition - это то, что он здесь назвал repsentation, причём последний термин для меня новость ))). Стандарт надо смотреть, на самом деле. Я так и понял. Выше мне говорили противоположные вещи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:47 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА почему вообще "класс" ? Наверно с легкой руки переводчиков книжек. Они много чего наизобретали в русскоязычной терминологии. Сейчас еще автопереводчики "помогают". В C#, например, ушли от "класса" к "типу", но появились "значимые и ссылочные типы", долго голову ломал чего бы это значило, пока не понял что просто корявый перевод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:52 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryMasterZivпропущено... Я хочу заметить, что " использование префиксов " в С не может решить данную проблему. Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек. Почему не может ? Я думал что как раз наоборот, решает. Например, имена всех переменных из библиотек Си начинаются с префикса _, более того, в стандарте де-факто оговаривается этот факт. Де-факто, потому что как мы убедились ранее это закон можно нарушить. Именно потому , что закон легко нарушить. Ты не можешь гарантировать, что все глобальные имена в программе у тебя будут уникальными, особенно если используешь много сторонних библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 13:13 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. Here are "forward declaration" of a class and its "definition". Understood? Representation is a little trickier to explain. Assume there is some object in real life (for example a date). Someone created a class Date for you and you are using it. You do not care how this class done internally, you have a documentation, you know which methods are exposed - you are using this class. Right now, the object 'date' of real life is represented by the class 'Date'. Then you decided to create your own class Date to replace the old one. You do so by mimicking the old class, in order to not rewrite the usage of the class in all your programs. Now you have two (someone's Date and your Date) representations of the same real-life object, which do different representations of the same logical object in computer's memory. You can also try looking up the definition of the word in encyclopedia. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 15:08 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury, Код: plaintext 1. 2. 3. 4. 5. Here are "forward declaration" of a class and its "definition". Understood? Representation is a little trickier to explain. Чё эт ты, раскладку клавиатуры вовремя не успел переключить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 16:49 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? Некоторые протаскивают понятие "прототип". Еще иногда в качестве interface пишут "стеретип". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 17:45 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? Не надо иначе. В С++ класс - это устоявшееся название для пользовательского типа. Особенно учитывая что в синтаксисе именно так эта сущность и зовется. Объект - это не тип и не класс, а экземпляр типа в рантайме. В С++ это разные вещи. И в стандарте объектом зовется именно экземпляр, т.е. область памяти с известной о ней информации о типе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 18:30 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
В Scala ввели понятие trait. Вместо интерфейса. Зачем надо - ХЗ. Еще не разбирался. Идеология ть ее так. Подготавливают почву значить для адептов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 18:32 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
В Обероне - "модули" вместо классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 19:18 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonВ Обероне - "модули" вместо классов.А в Перле - пакеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 02:13 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury, Код: plaintext 1. 2. 3. 4. 5. Here are "forward declaration" of a class and its "definition". Understood? Representation is a little trickier to explain. Assume there is some object in real life (for example a date). Someone created a class Date for you and you are using it. You do not care how this class done internally, you have a documentation, you know which methods are exposed - you are using this class. Right now, the object 'date' of real life is represented by the class 'Date'. Then you decided to create your own class Date to replace the old one. You do so by mimicking the old class, in order to not rewrite the usage of the class in all your programs. Now you have two (someone's Date and your Date) representations of the same real-life object, which do different representations of the same logical object in computer's memory. You can also try looking up the definition of the word in encyclopedia. На w такие серьезные вопросы смотреть не буду. В целом она мне не нравится, и пользуюсь ей крайне редко. Для того чтобы объяснить что такое представление класса лучше всего подходит/требуется именно такая ситуация ? Вот что говорит стандарт С++. 9.1 Class name 1. p216 A class definition introduces a new type. Нет замечаний о том, даётся ли только интерфейс класса, либо более. 2. p216-217 A class declaration introduces the class name into the scope where it is declared and hides any class, variable, function, or other declaration of that name in enclosing scope. Далее идут рассуждения об области видимости, не более. Да и определение того что такое class declaration дано в контексте области видимости. А ещё ниже приведён такой пример. p219 A simple example of s calss definition is Код: plaintext 1. 2. 3. 4. 5. 6. Once this definition has been given, the declaration Код: plaintext 1. ... Таким образом можно сделать вывод о том, что declaration понимается стандартом только в контексте области видимости и объявлении экземпляров класса. Пока никакой информации о repersentation нет вообще. Зато в 9.3 Member function 1. Function declared in the definition of a class, excluding those declared with a friend specifier are called member function of that class. Далее 2.A member function may be defined in its class definition, in which case it is an inline member function, or it maybe defined outside of its class definition if it has already been declared but not defined in its class definition. Можно сделать следующие выводы: 1. class definition есть определение нового пользовательского типа данных. 2. class definition может содержать в себе как прототипы member functions так и реализации member functions. 3. термин class declaration имеет отношение к области видимости, и объявлению объектов классов 4. термин class representation не имеет специального значения согласно стандарту С++. Если кто-то не согласен с данными выводами, скажите об этом пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 03:04 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? Не надо иначе. В С++ класс - это устоявшееся название для пользовательского типа. Особенно учитывая что в синтаксисе именно так эта сущность и зовется. Объект - это не тип и не класс, а экземпляр типа в рантайме. В С++ это разные вещи. И в стандарте объектом зовется именно экземпляр, т.е. область памяти с известной о ней информации о типе. В таком случае согласен и принимаю это название ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 03:07 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
[quot SashaMercury4. термин class representation не имеет специального значения согласно стандарту С++.[/quot]во, так и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 09:26 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Сашик давай качай скиллы в 3D-графике. Кури векторные операции. Фигли тут ковырять грязь из под ногтей... Всё равно земля крутится и солнце светит. От того что класс незвать не классом ничо не изменится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 18:31 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Марк, мне кажется что я не многим смогу помочь вам в сравнении программ на Си, С++ и Java. Если у вас возникнут конкретные вопросы по математике в том топике, то всегда обращайтесь :) Последнюю половину прошедшей недели я потратил на ту программу-поздравление, и потому ООП не занимался. Но сегодня утром продолжил. У меня вновь возникли вопросы, подскажите пожалуйста 1. BS пишет: The protection of private data relies on restriction of the use of the class member names. It can therefore be circumvented by address manipulation and explicit type conversion. But this, of course, is cheating. C++ protects against accident rather than deliberate circumvention(fraud). Only hardware can protect against malicious use of general-purpose language, and even that is hard to do in realistic systems. 1.1 Это значит что проверка доступа к полям класса осуществляется на уровне синтаксического анализа ? 1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ? 1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? 2.1 Правильный ли вывод: При разработке ПО желательно инициализировать объекты при их создании. В ООП каждый объект должен быть проинициализирован при создании. Можно ли считать это одной из важны деталей ООП ? 2.2 В каком-то случае мы решили что создадим объект и только потом проинициализируем. Что делать с дополнительными затратами на инициализацию при создании объекта, в которой нет необходимости. 2.3 Существуют ли вообще проблемы в серьёзных программах с конструкторами, и, в частности, с конструкторами по умолчанию ? 2.4 Почему синтаксис конструктора по умолчанию отличается от синтаксиса функции-члена без параметров ? Неужели сахар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 09:01 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Марк, мне кажется что я не многим смогу помочь вам в сравнении программ на Си, С++ и Java. Если у вас возникнут конкретные вопросы по математике в том топике, то всегда обращайтесь :) Вопросы есть. Создатель приложения Пол Гекберт (без названия) которое я назвал CardRaytracer был хитёр и использовал упрощённую модель мира. В частности я не нашёл матрицу аффинных преобразований для камеры и для объектов. Еще опытным путём установил что шары ортогональны к направлению квадратной плитки и это действительно хардкод. Независимо их крутить безе переделки ПО невозможно. Могу предположить что ориентируя объекты вдоль орт X,Y,Z Пол Гекберт получал нулевые коэффициенты матриц и просто выбрасывал из модели мира целые куски уравнений. Таким образом он упрощал объём кода. Собственно вопросы. 1) Где находится камера ? Куда она ориентирована? 2) Базовые трансформации объектов. Шары. Плиточный пол. Точечный источник света. Где. Как. Как управлять? Где pivot ? Где масштаб ? Где углы поворота по эйлеру. Или матрица ВСЕХ трансформаций. 3) Ambient (горизонт, небо). Как управлять. У меня нет планов менять базовую постановку. Ребята наколбасили огромный объём кода вручную. И этот результат будет зафиксирован как финальный. Но на будущее хотелось-бы узнать пару технических приёмов и возможно заюзать их в Game Development-е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 09:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.1 Это значит что проверка доступа к полям класса осуществляется на уровне синтаксического анализа ? Проверка происходит на этапе синтаксического анализа, т.к. обращение на недоступной 'private'-области с точки зрения проверки ничем не отличается от доступа, например, к несуществующему члену. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 10:04 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. SashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? Никак. Этот код - UB, и в любой момент может выстрелить в ногу написавшего. С++ пытается предотвратить случайный выстрел, но если кто-то очень упорен, и говорит компилятору "не лезь, я знаю, что делаю" ... в конце-концов, это его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 10:16 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury wrote >>1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ?[/quot] Код: plaintext 1. 2. 3. 4. >>1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? мозг )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 10:33 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? Pimpl . SashaMercury2.3 Существуют ли вообще проблемы в серьёзных программах с конструкторами, и, в частности, с конструкторами по умолчанию ? Из сегодняшнего: есть базовый класс, в котором один конструктор с одним параметром, для которого указано значение по умолчанию, и есть производный класс, у которого нетривиальный конструктор без параметров. Явного вызова конструктора предка в производном классе нет. gcc компилит нормально, вижуал студия ругается, мол, no accessible constructor. SashaMercury2.4 Почему синтаксис конструктора по умолчанию отличается от синтаксиса функции-члена без параметров ? Неужели сахар. Синтаксис конструкторов вообще отличается: во-первых, у них нет имён, во-вторых, как следствие первого, у них нельзя взять адрес или явно вызвать. Зачем это сделано - тут уже простор для спекуляций. Вон в Дельфи это не так, и вроде никаких особых проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 19:17 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39044620&tid=2018842]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 563ms |

| 0 / 0 |
