Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2014, 22:36   #1
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию виртуальные функции

Код:
#include <iostream>
#include <string>
using namespace std;

class Token
{
  public:
    virtual float getNumber()= 0;
    virtual char getOperator()= 0;
};
//***************************************************************
class Operator : public Token
{
  private:
    char oper;
  public:
    Operator(char ch) : oper (ch) {}
    char getOperator()
      {return oper;}
    float getNumber()
      {return 0;}
};
//***************************************************************
class Number : public Token
{
  private:
    float fnum;
  public:
    Number(float f) : fnum (f) {}
    float getNumber()
      {return fnum;}
    char getOperator()
      {return 'f';}
};
//***************************************************************
class Stack
{
  private:
    Token* atoken[100];
    int top;
  public:
    Stack ()
      {top = 0;}
    void push(Token* t)
      {atoken[++top] = t;}
    Token* pop ()
      {return atoken [top--];}
    int gettop () const
      { return top; }
};
//---------------------------------------------------------------
class express
{
  private:
    Stack s;
    char* str;
    int len;
  public:
    void parse ();
};
//------------------------------------------------
void express::parse ()
{
  float f = 10.22;
  char ch = '+';
  Number* numb = new Number (f);
  s.push(numb);
  Operator* oper = new Operator (ch);
  s.push(oper);
  cout << numb->getNumber();
  cout << oper->getOperator();
  cout << endl;
  cout << s.pop();
  cout << s.pop();
  delete oper;
  delete numb;
}

int main ()
{
  express e;
  e.parse();
  cout << endl;
  system ("pause");
  return 0;
}
Помогите, пожалуйста! Почему s.pop() выводят на экран адреса, а не значения переменных?
igoreshka3333 вне форума Ответить с цитированием
Старый 01.10.2014, 22:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наверное потому что:
Цитата:
Token* atoken[100];
Тебе указатель разименовывать надебно:
Код:
cout << s.pop()->getNumber();
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2014, 23:21   #3
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Спасибо) То есть полиморфный стек, хоть и коряво, но вышел?
igoreshka3333 вне форума Ответить с цитированием
Старый 01.10.2014, 23:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю )
Не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
виртуальные функции zla9_kolu4ka Общие вопросы C/C++ 2 09.03.2014 03:19
Виртуальные функции studprog Помощь студентам 2 30.09.2012 21:00
C++ виртуальные функции iKarma Помощь студентам 2 28.11.2011 10:50
виртуальные функции vanek1 Помощь студентам 1 08.06.2011 17:49
Виртуальные функции bigory Помощь студентам 2 06.06.2009 22:44