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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2013, 18:20   #31
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

ту исправила, теперь вот такая ошибка - [Linker error] undefined reference to `WinMain@16'
Diana528 вне форума Ответить с цитированием
Старый 14.02.2013, 18:26   #32
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Теперь у NopayCar две открывающих скобочки. Хм.
Цитата:
[Linker error] undefined reference to `WinMain@16'
Это-то понятно: мы же пока написали только класс, а не программу. Программа, как известно, начинается с int main(void) (или _tmain. или ещё чего-нибудь похожего).

Но для начала давайте-таки проясним ситуацию с Display(). Что Вы хотели сделать написанным кодом?
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 18:29   #33
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

мне нужно чтобы как в задании
Программа должна предложить пользователю нажать одну клавишу для того, чтобы сымитировать заплатившего автолюбителя, и другую клавишу, чтобы сымитировать недобросовестного водителя. Нажатие клавиши Esc должно привести к выдаче текущих значений количества машин и выручки и завершению программы.
Diana528 вне форума Ответить с цитированием
Старый 14.02.2013, 18:34   #34
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
мне нужно чтобы как в задании
Не путайте. Эти строки относятся к тому, как предполагается использовать класс. Мы же сейчас решаем маленькую, простую, локальную задачу:
Цитата:
Метод display() выводит оба значения на экран.
Это и только это.
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 18:41   #35
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

не понимаю(
Diana528 вне форума Ответить с цитированием
Старый 14.02.2013, 18:49   #36
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
не понимаю(
Посмотрите ещё раз на WonderfulCat::Display - этот метод просто выводит, сколько кот рассказал сказок, сколько спел песен и куда ушёл. Так и ToolBooth::Display должен просто вывести на экран - сколько машин проехало и сколько денег в кассе. Только это и ничего больше.
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 18:54   #37
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Код:
#include <cstdlib>
#include <iostream>

using namespace std;

class ToolBooth 
{
private:
  unsigned int a; // chislo avtomobilei
  double s; //summarnaya viruchka
public:
 ToolBooth(void): a(0), s(0)
 {}
 void PayingCar(void)
 { ++a, s += 0.5f;
}
 void NopayCar(void)
 
      {
 ++a;
}
 void Display(void) const;
}; 
      void ToolBooth::Display(void) const
 {    
  std::cout << "Najmite klavishu space" <<a << std::endl;
  if (s>0)
  std::cout << "Deneg v kasse " << s << std::endl;
  else if(s <= 0)
    std::cout << "Summarnaya viruchka " << s << std::endl;
  
}
Diana528 вне форума Ответить с цитированием
Старый 14.02.2013, 19:12   #38
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

А зачем Вам if/else? У меня-то кот мог уйти налево, направо и остаться на месте, вот и было три ветки. У Вас s всегда не меньше нуля - ведь главная фишка private-переменных в том, что они могут меняться только внутри какого-то метода, а если переменная изначально равна нулю и умеет только увеличиваться на 0.5, то...
Ну, да ладно. Теперь -
Цитата:
Создайте программу, которая продемонстрирует работу класса. Программа должна предложить пользователю нажать одну клавишу для того, чтобы сымитировать заплатившего автолюбителя, и другую клавишу, чтобы сымитировать недобросовестного водителя. Нажатие клавиши Esc должно привести к выдаче текущих значений количества машин и выручки и завершению программы.
Ниже всего этого безобразия создаём функцию main (проверьте, как она называется в случае Вашего компилятора). Логика работы проста: в цикле с помощью std::cin.get() читаем клавишу, switch-оператором смотрим, что там нажали и предпринимаем соответствующее действие:
Код:
//Учёный кот
class WonderfulCat {
private: 
  int m_numSongs; //Число спетых песен. 

  int m_numTales; //Число рассказанных сказок

  int m_totalGone; //"Смещение" кота от начальной позиции. Если значение
  //отрицательное - это смещение влево, положительное - вправо

public: 
  //Конструктор создаёт новый объект. В нашем случае, аргументов нет, void
  WonderfulCat(void) : m_numSongs(0), m_numTales(0), m_totalGone(0) 
  {} 

  //"пойти налево".
  void GoLeft(void) {
    //Идём налево - +1 к сказкам (гм...), -1 к смещению
    ++m_numTales; --m_totalGone;
  }

  //Аналогично, "пойти направо"
  void GoRight(void){
    //+1 к песням, +1 к смещению
    ++m_numSongs; ++m_totalGone;
  }

  //Метод "отобразить статистику кота".
  void Display(void) const;
};

void WonderfulCat::Display(void) const {
  std::cout << "Songs sung - " << m_numSongs << std::endl;
  std::cout << "Tales told - " << m_numTales << std::endl;

  if(m_totalGone > 0)
    std::cout << "Gone right " << m_totalGone << " steps total." << std::endl;
  else if(m_totalGone < 0)
    std::cout << "Gone left " << -m_totalGone << " steps total." << std::endl;
  else
    std::cout << "Is standing at starting point." << std::endl;
}

int main(void){
  //Создаём 1 (одного) учёного кота:
  WonderfulCat c; //Здесь автоматически вызывается конструктор без параметров
  //До победного конца
  while(true){
    switch(std::cin.get()){
    case 27: //27 - код [Esc]
      c.Display();//Обратите внимание: метод всегда вызывается для какого-то объекта!
      //Именно этот объект будет передан в метод по "невидимому" указателю
      //И завершаем работу (обратите внимание, паузы нет - возможно, Вы захотите её поставить):
      return 0;
    case 'l': //Код клавиши [l]
      c.GoLeft();
      break;
    case 'r':
      c.GoRight();
      break;
    }
  }
}
Abstraction вне форума Ответить с цитированием
Старый 15.02.2013, 18:52   #39
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

А что тогда делать с if else
Diana528 вне форума Ответить с цитированием
Старый 16.02.2013, 12:28   #40
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
А что тогда делать с if else
В смысле? Оператор ветвления нужен в том случае, если Вам нужно при одном условии делать одно, а при другом - другое. У меня проверяются три варианта: m_totalGone меньше, больше или равно нулю. Если хотите, можете и у себя выделить отдельную ветку "в кассе пусто и грустно". Если хотите - просто выводите сумму в кассе, без всяких условий. Ваша программа, Ваш выбор.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в C++ Etete Помощь студентам 0 21.05.2012 21:36
Программа на С#. Классы MarihuanaP Фриланс 12 14.12.2011 05:48
С++,ООП,программа на классы VampIrchik Помощь студентам 1 25.01.2011 20:11
Классы в С++ Stager Помощь студентам 4 05.05.2009 10:05