![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
String |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 31.1.2008 Репутация: нет Всего: нет |
Добрый день.
У меня такая проблема, - использую только функциональное программирование. Никак не получается начать применять ООП. Язык вроде знаю, кое-что читал, а на практике ерунда выходит. Можешь посоветуете что-то почитать в моем случае? В частности такие вопросы еще есть: -Можно-ли использовать код класса не создавая объект? (В AS 2.0 так можно было вроде.) -Можно вызывать метод класса из метода этого-же класса? А из другого? -В методе можно сделать функцию? -Что бы объект использовать в любой точке кода, достаточно сделать его динамическим? -Менять свойства объекта надо через геттеры\сеттеры как в джаве, или можно напрямую? -Чем отличается "->" от "."? Извините за тупые вопросы. Заранее благодарен. |
|||
|
||||
azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
По ООП читать
Гради Буч - Объектно-ориентированный анализ и проектирование Приемы объектно-ориентированного проектирования. Паттерны проектирования
если метод статический - можно. конечно. Если есть объект. Метод - это обыкновенная функция. С текущим стандартом в функции нельзя написать функцию, но это ограничение можно обойти.
Нет, он должен быть доступен в любой точке кода. Посмотри на шаблон синглтон, но не сильно увлекайся, это не очень хороший шаблон, хотя иногда бывает необходим.
Можно и напрямую, все зависит от тебя. Я предпочитаю не менять переменные напрямую вообще, это сильно усложняет процесс отладки. Переменные должны быть ТОЛЬКО в private секции, модификация только через функции. ->: для указателей точка: для ссылки -> можно перегрузить, точку нельзя. Это сообщение отредактировал(а) azesmcar - 11.7.2011, 16:01 |
||||||||
|
|||||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Эти две цитаты друг другу противоречат. Так как вторая подразумевает, что с языком С и С++ имеется только ОЧЕНЬ поверхностное знакомство. Есть прикрепленная тема "Ответы на часто задаваемые вопросы". Рекомендую с ней ознакомиться. Особое внимание обратить на "с чего начать". |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
String, у тебя, почему-то, сливаются воедино понятия ООП и Си++. Это независимые понятия. ООП можно пользоваться и в Си, и в Си++, и в Дельфи, и в Джаве, etc... И наоборот, можно писАть на Си++ используя классы, но при этом никакого ООП не будет и в помине (так называемый Си с классами).
В общем, у меня к тебе предложение - определись, что ты хочешь изучить ООП, Си++ или ООП в приложении к Си++. Если последнее, то IMHO не стоит начинать с Си++. Он довольно сложный язык (недавние квесты это показали ![]() Повторю, это - IMHO. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
ValeryLaptev |
|
|||
Препод Профиль Группа: Участник Сообщений: 41 Регистрация: 19.8.2010 Где: Астрахань Репутация: 1 Всего: 1 |
String, самое простое - написать новый тип данных. Например, напиши класс для работы с датами. И используй потом даты в прогах.
|
|||
|
||||
sidiakin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Человек задал хороший вопрос, а ответ получил - "пиши, как нравится". Это не правильно! С++ это ООП язык. Так получилось, что С++ поддерживает код написаный на С вот никто и не стал заморачиваться. Получилось что С++ это язык С где можно создать класс. Лично я долго игрался с Java и мне понравилось ООП, но в С++ я не могу даже начать писать в стиле ООП, потому что во всех туторах, учебниках и т.д. не даются примеры в стиле ООП. Есть только раздел, где рассказывается, как создать класс. Я даже пробовал найти пример простого окна на WinApi в стиле ООП. Не нашел! Единственное, где я нашел использование ООП это библиотека QT.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
sidiakin, ООП не зависит от языка. Объектным программированием можно и на С пользоваться (например, ядро Linux). Главное, как ты мыслишь. Если ты мыслишь объектами, то ты можешь использовать практически любой язык (хоть ассемблер).
|
|||
|
||||
sidiakin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Не зависит. Но надо учитывать особенности языка/компилятора. Вот пытаюсь обернуть графический движок HGE в класс и не понимаю, что я делаю не так?
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
sidiakin, твоя проблема в том, что ты делаешь какие-то лишние методы. При этом созданный объект класса Game не может эксплуатироваться сразу. Нужно сначала выполнить Init. Зачем? Может сразу засунуть код Init() в конструктор? Далее, указатель hge у тебя публичный. А должен быть приватным. Почитай про инкапсуляцию. А заодно про полиморфизм и наследование.
|
|||
|
||||
sidiakin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Можно убрать Init, можно сделать указатель приватным. Только все равно работать не будет . Компилятор пишет: no matching function fo call to HGE::System_SetState(hgeFuncState, bool) ?
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
sidiakin, а причем тут ООП? Ты не путай, синтаксические ошибки и способы программирования.
|
|||
|
||||
sidiakin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Где синтаксические ? Вы можете прямо сказать что не так? Проблема в hge->System_SetState(HGE_FRAMEFUNC, Loop()); Метод loop возвр. true\false. Но так не работает, а если я подставлю вместо Loop() слово true\false То все работает . Я не понимаю почему так?
|
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
сравни
|
||||
|
|||||
sidiakin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Ха Это был мой 2-ой вопрос
![]() |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не верю, true/false c HGE_FRAMEFUNC выдаст ту же самую ошибку.. Добавлено через 1 минуту и 25 секунд требуется указатель на функцию типа hgeCallback.. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |