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

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

Страниц: 1 ... 5 6 [7] 8 9 ... 13   Вниз
  Печать  
Автор Тема: Как писать ООП программы?  (Прочитано 86571 раз)
_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.19 секунд. Запросов: 22.