Russian Qt Forum
Апреля 23, 2025, 01:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7] 8 9 ... 13   Вниз
  Печать  
Автор Тема: Как писать ООП программы?  (Прочитано 90350 раз)
_OLEGator_
Гость
« Ответ #90 : Февраля 25, 2014, 14:37 »

Если не компетентен, то должен страдать. Да. Так везде. Улыбающийся

Браво, аплодирую)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #91 : Февраля 25, 2014, 14:55 »

Ну это только если с ними не разобраться "MyNamespace::" нужно писать раз так тыщу. Если не компетентен, то должен страдать. Да. Так везде. Улыбающийся
Так Вы же советуете применять их почаще - не я. И человеку свойственно переоценивать собственную компетентность - как и недооценивать компетентность других  Улыбающийся

Вот хоть эти шейпы. Ничего против namespace возразить не могу, вроде уместен. Но с др стороны имена классов Rectangle и Circle все равно плоховаты - так и надо это исправить. После этого какая необходимость в namespace? Аж никакой, ну и чего с ним спешить? Добавить его никогда не поздно, не надо решать проблемы до их поступления.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #92 : Февраля 25, 2014, 15:04 »

Вот хоть эти шейпы. Ничего против namespace возразить не могу, вроде уместен. Но с др стороны имена классов Rectangle и Circle все равно плоховаты - так и надо это исправить. После этого какая необходимость в namespace? Аж никакой, ну и чего с ним спешить? Добавить его никогда не поздно, не надо решать проблемы до их поступления.
Все проблемы нужно решать заранее, потом решение может быть очень дорогим.
Про бинарную совместимость напомнить? Часто нельзя так просто поменять сигнатуры функций и методов, а библиотек написано уже огромное количество и колизии имен очень возможны. В крупных проектах.
А проблем с пространствами нет никаких, и ничего по тыще раз набирать не нужно. Нужно разобраться. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #93 : Февраля 25, 2014, 15:45 »

Все проблемы нужно решать заранее, потом решение может быть очень дорогим.
Не думаю что Вам всегда удавалось все решить заранее Улыбающийся Скорее всего начиная задачу Вы делаете вещи хорошо зарекомендовавшие себя в прошлом (в том числе и сразу заводите namespace). Ну так на здоровье - но есть и др подходы

а библиотек написано уже огромное количество и колизии имен очень возможны. В крупных проектах.
С этим никто не спорит, но совершенно незачем самому напрашиваться на коллизии давая такое имя как Rectangle. Скромнее надо быть Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #94 : Февраля 25, 2014, 15:50 »

С этим никто не спорит, но совершенно незачем самому напрашиваться на коллизии давая такое имя как Rectangle. Скромнее надо быть Улыбающийся
Это даже не смешно, а какое имя я должен дать? Такое "asdasd"?

Еще раз повторю, в пространствах имен нет никаких проблем, не нужно по тыще раз ничего набирать, если научиться ими пользоваться. Поэтому, отказываться от них по вымышленным причинам не вижу смысла.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #95 : Февраля 25, 2014, 18:17 »

Это даже не смешно, а какое имя я должен дать? Такое "asdasd"?
К таким извращениям я не призывал - достаточно добавить "личный префикс" который обычно 1 буква, полезно во всех отношениях.

Еще раз повторю, в пространствах имен нет никаких проблем, не нужно по тыще раз ничего набирать, если научиться ими пользоваться. Поэтому, отказываться от них по вымышленным причинам не вижу смысла.
Вы же не забывайте добавлять типа "я считаю, мое мнение.." Улыбающийся А то звучит слишком категорично. У Вас одна точка зрения, у меня другая (и ей тоже не один день), это нормально.

Ладно, что-то ТС примолк. Ох и резво он стартовал - как бы не "перегорел"  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #96 : Февраля 25, 2014, 18:24 »

К таким извращениям я не призывал - достаточно добавить "личный префикс" который обычно 1 буква, полезно во всех отношениях.
Так это корявая попытка сделать то, что делает namespace. Улыбающийся Для чего извращаться, если есть полноценное решение.

Вы же не забывайте добавлять типа "я считаю, мое мнение.." Улыбающийся А то звучит слишком категорично.
Вовсе нет.

У Вас одна точка зрения, у меня другая (и ей тоже не один день), это нормально.
Пока что вы не показали не одного убедительного довода, кроме незнания предмета.

Ладно, что-то ТС примолк. Ох и резво он стартовал - как бы не "перегорел"  Улыбающийся
А что там резвого, по моему кучу времени он занимается какой-то ерундой с двумя классами в которых два метода. Я бы сказал, что он ничего не делает.

Записан
8Observer8
Гость
« Ответ #97 : Февраля 25, 2014, 21:30 »

Помогите, пожалуйста, найти ошибку. Говорит:

Цитировать
GameCharacter\functions_for_healthcalc.h:9: error: 'GameCharacter' does not name a type
 int defaultHealthCalc(const GameCharacter& gc);
                                        ^

В этом файле:

Код
C++ (Qt)
#ifndef FUNCTIONS_FOR_HEALTHCALC_H
#define FUNCTIONS_FOR_HEALTHCALC_H
 
#include "gamecharacter.h"
 
namespace GameStuff {
 
// функция алгоритма по умолчанию для вычисления жизненной силы персонажа
int defaultHealthCalc(const GameCharacter& gc);
 
// функции вычисления жизненной силы с разным поведением
int loseHealthQuickly(const GameCharacter& gc);
int loseHealthSlowly(const GameCharacter& gc);
 
}
 
#endif // FUNCTIONS_FOR_HEALTHCALC_H
 

Если несложно - скомпилируйте у себя. Вот отсюда можно скачать ("Download ZIP" справа) https://github.com/8Observer8/GameCharacter/tree/strategyWithPointers

Очень буду признателен. Заранее спасибо.

P.S. Это попытка посмотреть в деле этот пример: http://www.e-reading.bz/chapter.php/1002058/88/Mayers_-_Effektivnoe_ispolzovanie_CPP.html
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #98 : Февраля 25, 2014, 21:43 »

Код
C++ (Qt)
namespace GameStuff {
 
class GameCharacter;
 
// функция алгоритма по умолчанию для вычисления жизненной силы персонажа
int defaultHealthCalc(const GameCharacter& gc);
 
// функции вычисления жизненной силы с разным поведением
int loseHealthQuickly(const GameCharacter& gc);
int loseHealthSlowly(const GameCharacter& gc);
 
}

Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   // однотипные персонажи с разным поведением относительно здоровья
   GameStuff::EvilBadGay ebg1(GameStuff::loseHealthQuickly);
   GameStuff::EvilBadGay ebg2(GameStuff::loseHealthSlowly);
 
   return a.exec();
}
 

Код
C++ (Qt)
namespace GameStuff {
 
class GameCharacter
{
public:
   GameCharacter();
 
   typedef int (*HealthCalcFunc)(const GameCharacter&);
 
   explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc)
       : healthFunc(hcf)
   {}
 
   int healthValue() const;
   int doHealthValue() const;
 
//    int healthValue() const {
//        return healthFunc(*this);
//    }
 
private:
   HealthCalcFunc healthFunc;
};
 
}
 
« Последнее редактирование: Февраля 25, 2014, 21:47 от gil9red » Записан

Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #99 : Февраля 25, 2014, 21:48 »

2gil9red Там не только это. Теперь вроде все, но мне кажется ТС хотел вариант с указателем на функцию. Я оставил его. Улыбающийся
8Observer8 Держите.
« Последнее редактирование: Февраля 25, 2014, 21:49 от Old » Записан
8Observer8
Гость
« Ответ #100 : Февраля 25, 2014, 21:50 »

Спасибо огромное, парни! Завтра доделаю Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #101 : Февраля 25, 2014, 21:54 »

2gil9red Там не только это. Теперь вроде все, но мне кажется ТС хотел вариант с указателем на функцию. Я оставил его. Улыбающийся
8Observer8 Держите.
Не успел =)
Записан

8Observer8
Гость
« Ответ #102 : Февраля 26, 2014, 09:15 »

Объясните, пожалуйста, почему в этом коде нужно объявлять класс "class GameCharacter;" Я же включаю заголовок #include "gamecharacter.h":

Код
C++ (Qt)
#ifndef FUNCTIONS_FOR_HEALTHCALC_H
#define FUNCTIONS_FOR_HEALTHCALC_H
 
#include "gamecharacter.h"
 
namespace GameStuff {
 
class GameCharacter;
 
// функция алгоритма по умолчанию для вычисления жизненной силы персонажа
int defaultHealthCalc(const GameCharacter& gc);
 
// функции вычисления жизненной силы с разным поведением
int loseHealthQuickly(const GameCharacter& gc);
int loseHealthSlowly(const GameCharacter& gc);
 
}
 
#endif // FUNCTIONS_FOR_HEALTHCALC_H
 
Записан
8Observer8
Гость
« Ответ #103 : Февраля 26, 2014, 09:32 »

Почти всё исправил. Помогите, пожалуйста, доделать. Сейчас говорит, что:

Цитировать
GameCharacter\gamecharacter.h:15: error: 'defaultHealthCalc' is not a member of 'GameStuff'
     explicit GameCharacter(HealthCalcFunc hcf = GameStuff::defaultHealthCalc)

Код: https://github.com/8Observer8/GameCharacter/tree/strategyWithPointers
Записан
8Observer8
Гость
« Ответ #104 : Февраля 26, 2014, 10:01 »

Я пытаюсь вот этот пример реализовать: http://www.e-reading.bz/chapter.php/1002058/89/Mayers_-_Effektivnoe_ispolzovanie_CPP.html

Подключаю заголовок:
Код
C++ (Qt)
#include <functional>
 

Пишу вот такую строчку:
Код
C++ (Qt)
typedef std::tr1::function HealthCalcFunc;
 

Но компилятор не находит tr1. Почему? Как написать?

Записан
Страниц: 1 ... 5 6 [7] 8 9 ... 13   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 23.