Пример из учебника

Тема в разделе "Общие вопросы по С и С++", создана пользователем Axe79, 6 ноя 2009.

  1. Axe79

    Axe79 Гость

    учу С++ по "Джесс Либерти - Освой самостоятельно С++ за 21 день"
    очень доступно как для чайника))) т.е. дя мну))
    и вот конец первой недели и большой листинг ... пообещали что если всё пойму то считай язык почти осилил (шучу, но было б приятно ;) ) и вот набрал, откомпилил, (сижу под Alt Linux компилятор g++) убил все явные ошибки да только что-то не то ... по ходу переменная где-то не ловит значения ...(ниже аут вывел)
    вроде как не присваивается... я и так экспериментировал и эдак вся конструкция понятна все метания и ростекания мыслью по коду вроде тоже... хоть дальше иди но .. не хочется оставлять нерешённый вопрос за спиной

    Ну что поможете?


    Код (C++):
    #include <iostream>
    using namespace std;
    // intintboolfalsetrue//непонятная фигня
    enum CHOICE { DrawRect=1, GetArea, GetPerim, ChangeDimensions, Quit};

    class Rectangle // объявляем ректальный классс
    {
    public:

    Rectangle(int width, int heigth); //Инициируем конструктор
    ~Rectangle();            //то самое с деструктором

    //Методы доступа
    int GetHeigth() const {return itsHeigth;}
    int GetWidth() const {return itsWidth;}
    int GetArea() const {return itsHeigth * itsWidth;}
    int GetPerim() const {return 2 * (itsHeigth + itsWidth);}
    void SetSize(int newWidth, int newHeigth);

    //прочие методы


    private:
    int itsHeigth;
    int itsWidth;
    };

    //выполнение методов класса
    void Rectangle::SetSize(int newWidth, int newHeigth)
    {
    int itsWidth=newWidth;
    int itsHeigth=newHeigth;
    }


    Rectangle::Rectangle(int Width, int Heigth)
    {
    int itsHeigth=Heigth;
    int itsWidth=Width;
    }

    Rectangle::~Rectangle() {}

    int DoMenu();
    void DoDrawRect(Rectangle);
    void DoGetArea(Rectangle);
    void DoGetPerim(Rectangle);

    int main()
    {

    //Инициализируем объект theRect класа Rectangle с параметрами 30 и 5
    Rectangle theRect(30,5);
    int choice = DrawRect;
    int fQuit = false;

    while(!fQuit)
    {
    choice = DoMenu();
    if(choice < DrawRect || choice > Quit)
    {
    cout << "\n Invalid Choice, please try again.\n\n";
    continue;
    }
    switch (choice)
    {
    case    DrawRect:
    DoDrawRect(theRect);
    break;
    case    GetArea:
    DoGetArea(theRect);
    break;
    case    GetPerim:
    DoGetPerim(theRect);
    break;
    case    ChangeDimensions:
    int newHeigth, newWidth;
    cout << "\n New width ";
    cin >> newWidth;
    cout << "\n New heigth ";
    cin >> newHeigth;
    theRect.SetSize(newWidth, newHeigth);
    DoDrawRect(theRect);
    break;
    case    Quit:
    fQuit = true;
    cout << "\n Exiting...\n\n";
    break;
    default :
    cout << "Eror in choice!\n";
    fQuit = true;
    break;
    }               // конец переключателя
    }                   // конец цикла
    return 0;
    }                   // конец функции main

    int DoMenu()
    {
    int choice;
    cout <<"\n\n *** Menu ***\n";
    cout <<"(1) Draw Rectangle\n";
    cout <<"(2) Area\n";
    cout <<"(3) Perimetr\n";
    cout <<"(4) Resize\n";
    cout <<"(5) Quit\n";

    cin >> choice;
    return choice;
    }

    void DoDrawRect(Rectangle theRect)
    {
    cout << theRect.GetHeigth()<<"\n";
    cout << theRect.GetWidth()<<"\n";
    int heigth = theRect.GetHeigth();
    int width = theRect.GetWidth();

    //  for (int i = 0; i<heigth; i++)
    //  {
    //       for (int j = 0; j<width; j++)
    //   { cout <<"*";}
    //  cout << "\n";
    //  }
    }


    void DoGetArea(Rectangle theRect)
    {
    cout << "Area: " << theRect.GetArea() << endl;
    }

    void DoGetPerim(Rectangle theRect)
    {
    cout << "Perimetr: " << theRect.GetPerim() << endl;
    }
    это аут
    <!--shcode--><pre><code class='dos'>[axe@localhost cppsy]$ g++ 1wee.cpp
    [axe@localhost cppsy]$ ./a.out


    *** Menu ***
    (1) Draw Rectangle
    (2) Area
    (3) Perimetr
    (4) Resize
    (5) Quit
    1
    -1075360568
    134516011


    *** Menu ***
    (1) Draw Rectangle
    (2) Area
    (3) Perimetr
    (4) Resize
    (5) Quit
    4

    New width 5

    New heigth 9
    -1075360568
    134516011


    *** Menu ***
    (1) Draw Rectangle
    (2) Area
    (3) Perimetr
    (4) Resize
    (5) Quit
    ^C
    [axe@localhost cppsy]$[/CODE]
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Оффтоп:
    Вы выбрали одну из самых фиговых книжек по C++..
    Теперь по делу:
    А в чем проблема? Я так и не понял. Код компилится, работает.. ЧТо не так? Научитесь задавать вопросы.
     
  3. virtpro

    virtpro Member

    Регистрация:
    18 сен 2009
    Сообщения:
    9
    Симпатии:
    0
    какой суровый администратор, а проблема то явна описана. А книжка роли не играет, программированию "научиться нельзя", можно "научиться пользоваться инструментами" реализующими это самое программирование.

    А по делу, все оказалось вот в этих строках
    Это из раздела "область видимости", скачай книжку "Язык программирования С++" (автор Бьерн Страуструп), и пользуйся ей как справочником, по ней учиться не рекомендую т.к. уж очень сложно там преподаются знания.

    <!--shcode--><pre><code class='С++'>#include <iostream>
    using namespace std;

    enum CHOICE { DrawRect=1, GetArea, GetPerim, ChangeDimensions, Quit};

    class Rectangle // объявляем ректальный классс
    {
    public:

    //Rectangle();
    Rectangle(int width, int heigth); //Инициируем конструктор
    ~Rectangle(); //то самое с деструктором

    //Методы доступа
    int GetHeigth() const {return itsHeigth;}
    int GetWidth() const {return itsWidth;}
    int GetArea() const {return itsHeigth * itsWidth;}
    int GetPerim() const {return 2 * (itsHeigth + itsWidth);}
    void SetSize(int newWidth, int newHeigth);

    //прочие методы
    private:
    int itsHeigth;
    int itsWidth;
    };

    //выполнение методов класса
    void Rectangle::SetSize(int newWidth, int newHeigth)
    {
    itsWidth = newWidth;
    itsHeigth = newHeigth;
    }
    Rectangle::Rectangle(int Width, int Heigth)
    {
    itsHeigth = Heigth;
    itsWidth = Width;
    }

    Rectangle::~Rectangle() {}

    int DoMenu();
    void DoDrawRect(const Rectangle &);
    void DoGetArea(const Rectangle &);
    void DoGetPerim(const Rectangle &);

    int main()
    {
    //Инициализируем объект theRect класа Rectangle с параметрами 30 и 5
    Rectangle theRect(30, 5);
    int choice = DrawRect;
    int fQuit = false;

    while(!fQuit)
    {
    choice = DoMenu();
    if(choice < DrawRect || choice > Quit)
    {
    cout << "\n Invalid Choice, please try again.\n\n";
    continue;
    }
    switch (choice)
    {
    case DrawRect:
    DoDrawRect(theRect);
    break;
    case GetArea:
    DoGetArea(theRect);
    break;
    case GetPerim:
    DoGetPerim(theRect);
    break;
    case ChangeDimensions:
    int newHeigth, newWidth;
    cout << "\n New width ";
    cin >> newWidth;
    cout << "\n New heigth ";
    cin >> newHeigth;
    theRect.SetSize(newWidth, newHeigth);
    DoDrawRect(theRect);
    break;
    case Quit:
    fQuit = true;
    cout << "\n Exiting...\n\n";
    break;
    default :
    cout << "Eror in choice!\n";
    fQuit = true;
    break;
    } // конец переключателя
    } // конец цикла
    return 0;
    } // конец функции main

    int DoMenu()
    {
    int choice;
    cout <<"\n\n *** Menu ***\n";
    cout <<"(1) Draw Rectangle\n";
    cout <<"(2) Area\n";
    cout <<"(3) Perimetr\n";
    cout <<"(4) Resize\n";
    cout <<"(5) Quit\n";

    cin >> choice;
    return choice;
    }

    void DoDrawRect(const Rectangle &theRect)
    {
    cout << theRect.GetHeigth()<<"\n";
    cout << theRect.GetWidth()<<"\n";
    }

    void DoGetArea(const Rectangle &theRect)
    {
    cout << "Area: " << theRect.GetArea() << endl;
    }

    void DoGetPerim(const Rectangle &theRect)
    {
    cout << "Perimetr: " << theRect.GetPerim() << endl;
    }[/CODE]
     
Загрузка...

Поделиться этой страницей