Форум программистов, компьютерный форум CyberForum.ru

Вызов методов класса - C++

Восстановить пароль Регистрация
 
Mee
 Аватар для Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 16:44     Вызов методов класса #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// practice.cpp : main project file.
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
const int size=20;
//========================================
class publication
{
private:
    char name[size];
    double price;
public:
    void getdata ( )
    {
        cout<<"Name<";
        cin.get(name,size);
        cout<<"Price<";
        cin>>price;
    }
    void putdata ( ) const
    {
        cout<<"Name: "<<name<<" $"
            <<fixed<<setprecision(2)<<price
            <<" ";
    }
};
//=========================================
class book : public publication
{
private:
    double pages;
public:
    void getdata ( )
    {
        publication::getdata();
        cout<<"Pages<";
        cin>>pages;
    }
    void putdata ( ) const
    {
        publication::putdata();
        cout<<setprecision(0)<<pages<<" pages"<<endl;
    }
};
//==========================================
class type : public publication
{
private:
    double length;
public:
    void getdata ( )
    {
        publication::getdata();
        cout<<"length<";
        cin>>length;
    } 
    void putdata ( ) const
    {
        publication::putdata();
        cout<<length<<" length"<<endl;
    }
};
//============================================
int main()
{
    book b1,b2;
    b1.getdata();             //этот работает 
    b2.getdata();             //а этот уже нет
    b1.putdata();
    b2.putdata();
    cin.get();
    return 0;
}
Первый обьект класса вызывает метод, а второй уже нет. Помогите разобратся
Ну и конешно если есть другие серьезные ошибки - указывайте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
28.07.2010, 17:04     Вызов методов класса #2
Что значит не работает, в чем это заключается?
Mee
 Аватар для Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 17:35  [ТС]     Вызов методов класса #3
запрашивается на ввод только первый обьект, потом проскакивает метод формирования для второго обьекта и сразу выводит результат

Вызов методов класса

 Комментарий модератора 
Вставляйте картинки в сообщения.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2010, 17:40     Вызов методов класса #4
cin.get() попробуйте. скорее всего /n в буфере остается
После этого: cin>>pages;
Или cout<<endl;

И кстати.. В книге может быть 255.454 страниц? Зачем pages имеет тип double?
Mee
 Аватар для Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 17:50  [ТС]     Вызов методов класса #5
добавление cin.get() в 39-ю строчку помогло, можете обьяснить почему так?
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,655
28.07.2010, 18:43     Вызов методов класса #6
Не знаю, в чем там было дело, я просто заменил нелюбимые мною низкоуровневые данные и функции более высокоуровневыми, и все работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "stdafx.h"
 
 
#include <iostream>
#include <iomanip>
#include <string>
 
typedef std::string  T_str;
 
using namespace std;
//========================================
class publication
{
private:        
    T_str  name;
    double price;
public:
    virtual void getdata()
    {
        cout << std::endl 
             << "Name <- ";        
        std::cin >> name;
        cout << "Price <- ";
        cin >> price;
    }
    void putdata() const
    {
        cout << std::endl 
             << "Name: " 
             << name 
             << '\t'
             << " $"
             << fixed 
             << setprecision(2) 
             << price 
             << '\t';
    }
};
//=========================================
class book : public publication
{
private:
    double pages;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Pages <- ";
        cin >> pages;
    }
    void putdata() const
    {
        publication::putdata();
        cout << setprecision(0) << pages << " pages" << endl;
    }
};
//==========================================
class type : public publication
{
private:
    double length;
public:
    void getdata()
    {
        publication::getdata();
        cout<<"length <- ";
        cin >> length;
    } 
    void putdata() const
    {
        publication::putdata();
        cout << length << " length" << endl;
    }
};
//============================================
int main()
{    
    //book b1,b2;
    //type b1,b2;
    book b1;
    type b2;
    b1.getdata();             
    b2.getdata();             
    b1.putdata();
    b2.putdata();
    cin.get();
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.07.2010, 00:15     Вызов методов класса #7
Mee, В потоке ввода остается \n или же какой-то другой символ. Следовательно, следующий вызов функции, вставляет \n или какой-то другой символ в поток ввода сразу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2010, 02:34     Вызов методов класса
Еще ссылки по теме:

Вызов методов класса C++
Вызов переопределенного метода из методов базового класса C++
C++ Последовательный вызов методов класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
29.07.2010, 02:34     Вызов методов класса #8
cin работает с буфером, а не напрямую с клавиатурой. Если буфер пуст, то производится ожидание ввода с клавиатуры, если нет, то сразу обрабатывается буфер. Иногда все содержимое буфера не может быть обработано (например если мы пытаемся записать int'ое число, а ввод кроме цифр содержит символы), поэтому необработанная часть так и остается в буфере. Чтобы сбросит буфер ввода, cin имеет специальный метод - sync().
Yandex
Объявления
29.07.2010, 02:34     Вызов методов класса
Ответ Создать тему
Опции темы

Текущее время: 19:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru