Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
1

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2010, 16:44
Ответы с готовыми решениями:

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

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

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

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

7
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
28.07.2010, 17:04 2
Что значит не работает, в чем это заключается?
0
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 17:35  [ТС] 3
запрашивается на ввод только первый обьект, потом проскакивает метод формирования для второго обьекта и сразу выводит результат

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


 Комментарий модератора 
Вставляйте картинки в сообщения.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.07.2010, 17:40 4
cin.get() попробуйте. скорее всего /n в буфере остается
После этого: cin>>pages;
Или cout<<endl;

И кстати.. В книге может быть 255.454 страниц? Зачем pages имеет тип double?
1
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
28.07.2010, 17:50  [ТС] 5
добавление cin.get() в 39-ю строчку помогло, можете обьяснить почему так?
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.07.2010, 00:15 7
Mee, В потоке ввода остается \n или же какой-то другой символ. Следовательно, следующий вызов функции, вставляет \n или какой-то другой символ в поток ввода сразу.
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
29.07.2010, 02:34 8
cin работает с буфером, а не напрямую с клавиатурой. Если буфер пуст, то производится ожидание ввода с клавиатуры, если нет, то сразу обрабатывается буфер. Иногда все содержимое буфера не может быть обработано (например если мы пытаемся записать int'ое число, а ввод кроме цифр содержит символы), поэтому необработанная часть так и остается в буфере. Чтобы сбросит буфер ввода, cin имеет специальный метод - sync().
0
29.07.2010, 02:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2010, 02:34
Помогаю со студенческими работами здесь

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

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

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

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

Реализовать вызов методов класса с помощью указателей на функции
Помогите пожалуйста!!! Есть несколько классов. Необходимо вызывать методы класса с помощью...

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru