| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > ООП и С++ |
| Автор: String 11.7.2011, 15:03 |
| Добрый день. У меня такая проблема, - использую только функциональное программирование. Никак не получается начать применять ООП. Язык вроде знаю, кое-что читал, а на практике ерунда выходит. Можешь посоветуете что-то почитать в моем случае? В частности такие вопросы еще есть: -Можно-ли использовать код класса не создавая объект? (В AS 2.0 так можно было вроде.) -Можно вызывать метод класса из метода этого-же класса? А из другого? -В методе можно сделать функцию? -Что бы объект использовать в любой точке кода, достаточно сделать его динамическим? -Менять свойства объекта надо через геттеры\сеттеры как в джаве, или можно напрямую? -Чем отличается "->" от "."? Извините за тупые вопросы. Заранее благодарен. |
| Автор: bsa 11.7.2011, 16:32 | ||
Эти две цитаты друг другу противоречат. Так как вторая подразумевает, что с языком С и С++ имеется только ОЧЕНЬ поверхностное знакомство. Есть прикрепленная тема "Ответы на часто задаваемые вопросы". Рекомендую с ней ознакомиться. Особое внимание обратить на "с чего начать". |
| Автор: borisbn 11.7.2011, 18:47 |
| String, у тебя, почему-то, сливаются воедино понятия ООП и Си++. Это независимые понятия. ООП можно пользоваться и в Си, и в Си++, и в Дельфи, и в Джаве, etc... И наоборот, можно писАть на Си++ используя классы, но при этом никакого ООП не будет и в помине (так называемый Си с классами). В общем, у меня к тебе предложение - определись, что ты хочешь изучить ООП, Си++ или ООП в приложении к Си++. Если последнее, то IMHO не стоит начинать с Си++. Он довольно сложный язык (недавние квесты это показали Повторю, это - IMHO. |
| Автор: ValeryLaptev 12.7.2011, 07:17 |
| String, самое простое - написать новый тип данных. Например, напиши класс для работы с датами. И используй потом даты в прогах. |
| Автор: sidiakin 13.1.2013, 09:29 |
| Человек задал хороший вопрос, а ответ получил - "пиши, как нравится". Это не правильно! С++ это ООП язык. Так получилось, что С++ поддерживает код написаный на С вот никто и не стал заморачиваться. Получилось что С++ это язык С где можно создать класс. Лично я долго игрался с Java и мне понравилось ООП, но в С++ я не могу даже начать писать в стиле ООП, потому что во всех туторах, учебниках и т.д. не даются примеры в стиле ООП. Есть только раздел, где рассказывается, как создать класс. Я даже пробовал найти пример простого окна на WinApi в стиле ООП. Не нашел! Единственное, где я нашел использование ООП это библиотека QT. |
| Автор: bsa 13.1.2013, 11:29 |
| sidiakin, ООП не зависит от языка. Объектным программированием можно и на С пользоваться (например, ядро Linux). Главное, как ты мыслишь. Если ты мыслишь объектами, то ты можешь использовать практически любой язык (хоть ассемблер). |
| Автор: sidiakin 13.1.2013, 12:32 | ||
Не зависит. Но надо учитывать особенности языка/компилятора. Вот пытаюсь обернуть графический движок HGE в класс и не понимаю, что я делаю не так?
|
| Автор: bsa 13.1.2013, 13:05 |
| sidiakin, твоя проблема в том, что ты делаешь какие-то лишние методы. При этом созданный объект класса Game не может эксплуатироваться сразу. Нужно сначала выполнить Init. Зачем? Может сразу засунуть код Init() в конструктор? Далее, указатель hge у тебя публичный. А должен быть приватным. Почитай про инкапсуляцию. А заодно про полиморфизм и наследование. |
| Автор: sidiakin 13.1.2013, 13:16 |
| Можно убрать Init, можно сделать указатель приватным. Только все равно работать не будет . Компилятор пишет: no matching function fo call to HGE::System_SetState(hgeFuncState, bool) ? |
| Автор: bsa 13.1.2013, 13:53 |
| sidiakin, а причем тут ООП? Ты не путай, синтаксические ошибки и способы программирования. |
| Автор: sidiakin 13.1.2013, 13:56 |
| Где синтаксические ? Вы можете прямо сказать что не так? Проблема в hge->System_SetState(HGE_FRAMEFUNC, Loop()); Метод loop возвр. true\false. Но так не работает, а если я подставлю вместо Loop() слово true\false То все работает . Я не понимаю почему так? |
| Автор: bsa 13.1.2013, 14:01 | ||||
сравни
|
| Автор: sidiakin 13.1.2013, 14:05 |
| Ха Это был мой 2-ой вопрос |
| Автор: mes 13.1.2013, 14:10 | ||||
не верю, true/false c HGE_FRAMEFUNC выдаст ту же самую ошибку.. Добавлено через 1 минуту и 25 секунд требуется указатель на функцию типа hgeCallback.. |
| Автор: sidiakin 13.1.2013, 14:12 | ||
Не выдаст |
| Автор: mes 13.1.2013, 14:16 |
| Автор: sidiakin 13.1.2013, 14:19 |
| А у меня все работает |
| Автор: mes 13.1.2013, 14:24 |
покажите эту строчку.. |
| Автор: bsa 13.1.2013, 14:27 | ||
может ты только пробовал false? Если так, то объяснение лежит на поверхности. |
| Автор: sidiakin 13.1.2013, 14:28 | ||
Так все работает
Если я в hge->System_SetState(HGE_FRAMEFUNC, false); вместо false подставлю метод Loop() или true То компилятор ругается |
| Автор: mes 13.1.2013, 14:29 | ||
sidiakin, никаких чудес
Добавлено @ 14:30 sidiakin, старайтесь точнее формулировать и проверять, это сэкономит нe только нам, но и Вам самим и время и нервы Добавлено через 4 минуты и 55 секунд в общем передавайте туда указатель на функцию и будет Вам счастие.. перед этим погуглите почему метод (нестатичная функция класса) для этой роли не годится.. и да не забудьте уточнить сигнатуру ожидаемой функции.. |
| Автор: sidiakin 13.1.2013, 14:34 |
| Я не понял, что с true не так |
| Автор: mes 13.1.2013, 14:36 |
это с false не так.. равна нулю и как литера приводима к нулевому указателю.. |
| Автор: sidiakin 13.1.2013, 15:46 | ||||
Не понял, как это сделать
А для чего тогда этот форум? Вобщем я зделал метод статическим и все заработало |
| Автор: mes 13.1.2013, 15:51 | ||
ну не для того, чтоб сто раз из пустого в порожнее периливать.. Добавлено через 52 секунды потому и
|
| Автор: sidiakin 13.1.2013, 16:03 | ||
Нуу я так понял, что нестатичная ф-ия передает еще и указатель на объект... Кстати я не понял почему у меня работает &Game::Loop , а &Game::Loop() - не работает |
| Автор: mes 13.1.2013, 16:16 | ||
потому что в первом случае берете адрес функции, а во втором адрес результата функции.. |
| Автор: sidiakin 13.1.2013, 16:20 |
| Хочу бросить камень в того, кто сказал "С Java на C++ можно легко перейти". Всем спасибо Бум дальше разбираться |
| Автор: mes 13.1.2013, 16:36 | ||
нет это далеко не лёгкий путь.. особенно если нет понимания, что отражают ява концепты.. в обратную сторону как раз проще перейти )) |