Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Razlichit' bez "if"...  (Прочитано 5305 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
rapa
Гость
« : 02-12-2004 04:34 » 

V obshem takaya tema:Mne nujno sdelat' 2 classa:Stack_numbers i Stack_operations.Kak vy uje ponyali v odnom chisla v drugov arifmeticheskie operazii.Nujno vytaskivat' iz Stak_numbers 2 chisla,potom iz Stack_operations operaziyu,delat' ee i rezul'tat obratno v Stack_numbers.Teper' vopros:Kak mne  ponyat' kakaya operaziya esli mne nel'zya pol'zovat'sya ne "if",ne "switch",ne...,v obshem nichem dlya sravnivaniya???
Zaranee blagodaren!!!
Записан
Serega
Гость
« Ответ #1 : 02-12-2004 07:23 » new

Делаешь каждую операцию классом
Код:
#include<stack>
#include<memory>
#include<iostream>

template<class numbers_type>
classs NumbersStack : public std:stack<numbers_type> {}

template<class numbers_type>
class Operation
{
public:
typedef std:auto_ptr< Operation<numbers_type> > ptr;

virtual void DoOperation(NumbersStack<numbers_type>& ns);
}

template<class numbers_type>
classs OpeationsStack : public std:stack<Operation<numbers_type>::ptr> {}

template<class numbers_type>
class OperationPlus : public Operation<numbers_type>
{
public:
void DoOperation(NumbersStack<numbers_type>& ns)
{
numbers_type op1 = ns.top();
ns.pop();
numbers_type op2 = ns.top();
ns.pop();
ns.push(op1 + op2);
}
}

template<class numbers_type>
void Calculate(NumbersStack<numbers_type>& ns, OpeationsStack<numbers_type>& os)
{
for(; !os.empty(); os.pop() )
{
os.top()->DoOperaton(ns);
}
}

typedef int nt;

void main()
{
NumbersStack<nt> numstack;
numstack.push(1);
numstack.push(2);

OperationsStack<nt> opstack;
opstack.push(new OperationPlus<nt>());

Calculate(numstack, opstack);

std:cout << "Result: " << numstack.top() << std:endl;
}
« Последнее редактирование: 02-12-2007 19:13 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 02-12-2004 07:24 » 

rapa, можно использовать таблицу указателей на ф-ии обработки операций, а номера операций использовать в качестве индексов.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines