Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 3
Регистрация: 02.02.2014
Сообщений: 65
1

Вызов методов производного класса

30.03.2014, 13:23. Показов 551. Ответов 3
Метки нет (Все метки)

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

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
89
90
91
92
93
#include <iostream>
#include <string>
#include <conio.h>
#include <locale>
using namespace std;
 
class person{
    string name;
    int year;
    char pol;
    
    public:
        person() { name=""; year=0; pol=' ';}
        person(string,char);
        int GetYear(){return year;}
        string GetName() { return name;}
        char GetPol() {return pol;}
        void SetName (string Name) {name=Name;}
        void SetYear(int Year){year=Year;}              
        void SetPol(char Pol) {pol=Pol;}
        void scan() { cout<<"Ââåäèòå ÔÈÎ: \n"; getline(cin,name); getline (cin,name); cout<<"Ââåäèòå ãîä ðîæäåíèÿ:\n"; 
        cin>>year; cout<<"Ââåäèòå ïîë:\n"; cin>>pol;}
        void print() { cout<<"ÔÈÎ: "<<name<<endl<<"Ãîä ðîæäåíèÿ: "<<year<<endl<<"Ïîë:"<<pol<<endl;}
        };
        
        class client_library:public person{//íàñëåäîâàòåëüí³é êëàññ îò person
            int number_b;//íîìåð áèëåòà
            int vnesok; 
            string deta;//äàòà ïîëó÷åíèÿ áèëåòà
            string books;
 
            public:
                
                int getnumber_b() {return number_b;}
                string getdeta() {return deta;}
                int getvnesok() {return vnesok;}
                string getbooks () {return books;}
                
                void setnumber_b(int nBil) {number_b=nBil;}
                void setdeta (string d) {deta=d;}
                void setvnesok (int Vn) {vnesok=Vn;}
                void setbooks (string bk) {books=bk;}
                
                void Zn ();
                void scan();
                void print();
            };
                 
            
                 void client_library::scan()
                    { 
                     int n=0;
                     person::scan();
                      cout<<"Ââåäèòå íîìåð áèëåòà: "; 
                      cin>>number_b; 
                      cout<<"\nÂâåäèòå äàòó âûäà÷è: "; 
                      getline(cin,deta);
                        cout<<"\nÂâåäèòå ñóììó åæåìåñÿ÷íîãî âçíîñà â êëóá: "; 
                        cin>>vnesok; 
                        cout<<"\nÂâåäèòå êîëè÷åñòâî êíèã: "; 
                        cin>>n; 
                        cout<<"\nÂâåäèòå íàçâàíèÿ êíèã: ";
                        for(int i=0;i<n;i++) 
                         { 
                             getline(cin,books);
                         } 
                    }
                                
                void client_library::print()
                {
                    person::print();
                    cout<<"Íîìåð áèëåòà: "<<number_b<<endl<<"Äàòà âûäà÷è: "<<deta<<endl;
                    cout<<"Åæåãîäíûé âçíîñ: "<<vnesok*12<<endl;
                    cout<<"Êíèãè: \n"<<books;
                }
        
        
        int main()
        {   
            int n;
            setlocale(LC_ALL,"Russian");
            cout<<"Vvedite k-vo person: ";
            cin>>n;
            cout<<endl;
            client_library *a=new client_library [n];
            for (int i=0; i<n; i++)
            {
            a[i].scan();
            a[i].print();
            }
            return 0;
        getch();
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2014, 13:23
Ответы с готовыми решениями:

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

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

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp,...

Вызов объектом базового класса функцию из производного класса!
Как можно осуществить вызов или передачу значения в базовый класс для дальнейшего вычисления этого...

3
Модератор
Эксперт С++
11922 / 9654 / 5846
Регистрация: 18.12.2011
Сообщений: 25,893
30.03.2014, 13:45 2
Все у Вас вызывается правильно.
Может быть забыли, что у Вас внутри функций производного класса
стоит вызов соответствующих функций базового класса, например в client_library::scan()
C++
1
person::scan();
Обратите внимание на ошибки ввода такого типа
C++
1
2
3
4
cout<<"Введите номер билета: "; 
                      cin>>number_b; 
                      cout<<"\nВведите дату выдачи: "; 
                      getline(cin,deta);
После ввода number_b указатель потока стоит на символе "конец строки".
getline(cin,deta) - прочитает этот символ как целую строку.
Проще всего в этих местах дублировать чтение.
C++
1
2
 getline(cin,deta);
 getline(cin,deta);
1
1 / 1 / 3
Регистрация: 02.02.2014
Сообщений: 65
30.03.2014, 14:38  [ТС] 3
Заработало, все отлично.Спасибо. Не могу теперь понять, почему в функции print не выводится список книг?

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream>
#include <string>
#include <conio.h>
#include <locale>
using namespace std;
 
class person{
    string name;
    int year;
    char pol;
    
    public:
        person() { name=""; year=0; pol=' ';}
        person(string,char);
        int GetYear(){return year;}
        string GetName() { return name;}
        char GetPol() {return pol;}
        void SetName (string Name) {name=Name;}
        void SetYear(int Year){year=Year;}              
        void SetPol(char Pol) {pol=Pol;}
        void scan() { cout<<"Введите ФИО: \n"; getline(cin,name); getline (cin,name); cout<<"Введите год рождения:\n"; 
        cin>>year; cout<<"Введите пол:\n"; cin>>pol;}
        void print() { cout<<"ФИО: "<<name<<endl<<"Год рождения: "<<year<<endl<<"Пол:"<<pol<<endl;}
        };
        
        class client_library:public person{//наследовательній класс от person
            int number_b;//номер билета
            int vnesok; 
            string deta;//дата получения билета
            string books;
            int k_b;//количество книг
            
 
            public:
                
                
                int getnumber_b() {return number_b;}
                string getdeta() {return deta;}
                int getvnesok() {return vnesok;}
                string getbooks () {return books ;}
                
                void setnumber_b(int nBil) {number_b=nBil;}
                void setdeta (string d) {deta=d;}
                void setvnesok (int Vn) {vnesok=Vn;}
                void setbooks (string bk) {books=bk;}
                
                void Zn ();
                void scan();
                void print();
            };
                 
                 void client_library::Zn()
                 {  
                    int Zn=0;
                    if(k_b<=5)
                    Zn=5;
                    if (k_b>5&&k_b<20)
                    Zn=10;
                    if (k_b>=20)
                    Zn=15;
                    cout<<"\nСкидка: "<<Zn<<"%\n\n";
                 }
                 
                 void client_library::scan()
                    { 
                     
                      person::scan();
                      cout<<"Введите номер билета: "; 
                      cin>>number_b; 
                      cout<<"Введите дату выдачи: "; 
                      getline(cin,deta);
                      getline (cin,deta);
                        cout<<"Введите сумму ежемесячного взноса в клуб: "; 
                        cin>>vnesok; 
                        cout<<"Введите количество книг: "; 
                        cin>>k_b; 
                        cout<<"Введите названия книг: \n";
                        string *books=new string [k_b];
                        for(int i=0;i<k_b;i++) 
                         { 
                             getline(cin,books[i]);
                             
                         } 
                         cout<<endl;
                         
                    }
                                
                void client_library::print()
                {
                    
                    person::print();
                    cout<<"Номер билета: "<<number_b<<endl;
                    cout<<"Дата выдачи: "<<deta<<endl;
                    cout<<"Ежегодный взнос: "<<vnesok*12<<endl;
                    cout<<"Книги: ";
                    for (int i=0;i<k_b;i++)
                    {
                        cout<<books[i];
                    }
                    
                }
        
        
        int main()
        {   
            int n;
            setlocale(LC_ALL,"Russian");
            cout<<"Введите количество человек: ";
            cin>>n;
            cout<<endl;
            client_library a;
            for (int i=0; i<n; i++)
            {
            a.scan();
            a.print();
            a.Zn();
            }
            return 0;
            getch();
    }
Добавлено через 2 минуты
И еще...извините, что так много вопросов..хочу разобраться
Скажите, в начале обязательно писать эти строки? я думала что да, но потом решила проверить, закомментировала, и ничего не изменилось, программа все также успешно работала..

C++
1
2
3
4
5
6
7
8
9
int getnumber_b() {return number_b;}
                string getdeta() {return deta;}
                int getvnesok() {return vnesok;}
                string getbooks () {return books ;}
                
                void setnumber_b(int nBil) {number_b=nBil;}
                void setdeta (string d) {deta=d;}
                void setvnesok (int Vn) {vnesok=Vn;}
                void setbooks (string bk) {books=bk;}
0
Модератор
Эксперт С++
11922 / 9654 / 5846
Регистрация: 18.12.2011
Сообщений: 25,893
30.03.2014, 14:47 4
Цитата Сообщение от Федорец Посмотреть сообщение
string *books=new string [k_b]; for(int i=0;i<k_b;i++) { getline(cin,books[i]); }
Это неправильно.
Попробуйте так:
C++
1
2
3
char tmp[100];
getline(cin,tmp);
books.pushback(tmp);
Добавлено через 2 минуты
Строки типа
Цитата Сообщение от Федорец Посмотреть сообщение
int getnumber_b() {return number_b;}
пишутся, если Вы решили предоставить доступ к защищенным данным внешним приложениям.
По возможности этого лучше не делать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2014, 14:47
Помогаю со студенческими работами здесь

Вызов виртуального метода базового класса из указателя производного
Допустим есть такой код: #include &lt;iostream&gt; class Base { public: virtual void f() {...

Вызов метода производного класса через указатель на базовый класс
Всем привет ! Подскажите почему , при выполнении строки 45 я получаю ошибку ? А именно при...

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

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

Вызов методов класса
// practice.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru