Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
#1

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

28.07.2010, 16:44. Просмотров 1259. Ответов 7
Метки нет (Все метки)

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;
}
Первый обьект класса вызывает метод, а второй уже нет. Помогите разобратся
Ну и конешно если есть другие серьезные ошибки - указывайте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2010, 16:44
Ответы с готовыми решениями:

Вызов методов класса из двойного указателя на экземпляр класса
Добрый день! Как можно вызвать метод класса по двойному указателя на его...

Вызов методов класса
Здравствуйте! При компиляции программы(в среде CodeBloks) выдается такая...

Вызов методов производного класса
Возникла проблема с выполнением задачи. программа запускается, работает, но...

Последовательный вызов методов класса
Здравствуйте. Есть два метода, как их запихнуть в класс, чтобы оба работали,...

Вызов методов производного класса из базового
Возможно ли, чтобы class A { void f1() { f2();//если вызвано из B, то...

7
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
28.07.2010, 17:04 #2
Что значит не работает, в чем это заключается?
0
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 17:35  [ТС] #3
запрашивается на ввод только первый обьект, потом проскакивает метод формирования для второго обьекта и сразу выводит результат

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


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

И кстати.. В книге может быть 255.454 страниц? Зачем pages имеет тип double?
1
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 17:50  [ТС] #5
добавление cin.get() в 39-ю строчку помогло, можете обьяснить почему так?
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
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;
}
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
29.07.2010, 00:15 #7
Mee, В потоке ввода остается \n или же какой-то другой символ. Следовательно, следующий вызов функции, вставляет \n или какой-то другой символ в поток ввода сразу.
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
29.07.2010, 02:34 #8
cin работает с буфером, а не напрямую с клавиатурой. Если буфер пуст, то производится ожидание ввода с клавиатуры, если нет, то сразу обрабатывается буфер. Иногда все содержимое буфера не может быть обработано (например если мы пытаемся записать int'ое число, а ввод кроме цифр содержит символы), поэтому необработанная часть так и остается в буфере. Чтобы сбросит буфер ввода, cin имеет специальный метод - sync().
0
29.07.2010, 02:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2010, 02:34

Вызов наследуемых методов из базового класса
Всем доброго времени суток, перейду сразу к сути. Код: class Base { ...

Вызов методов класса в функцию main()
#include &lt;iostream&gt; using namespace std; class Person { public: char...

Вызов переопределенного метода из методов базового класса
Здравствуйте, у меня есть два класса, базовый и производный. В производном...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru