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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
#1

Выполнение не той функции при наследовании - C++

23.03.2012, 00:02. Просмотров 375. Ответов 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#pragma hdrstop
 
#include <iostream.h>
#include <conio.h>
#include <tchar.h>
#include <string>
//---------------------------------------------------------------------------
class publication
{
  protected:
    string name;
    float symm;
  public:
    void getdata()
    {
      wcout<<L"Введите название книги: ";
      getline(cin,name);
      wcout<<L"Введите ее цену:        ";
      cin>>symm;
    }
 
    void showdata() const
    {
      cout<<"-------------------------------------";
      wcout<<L"\n\nКнига: ";cout<< name <<endl;
      wcout<<L"Цена:  " << symm<<L"р."<<endl;
      cin.get();
    }
};
 
class publication2 : public publication
{
  protected:
    int dd;
    int mm;
    int gggg;
  public:
    publication2():dd(0),mm(0),gggg(0){}
 
    void getdate()
    {
      publication::getdata();
      char sim = '/';
      wcout << L"Введите дату в формате dd/mm/gggg\n";
      cin >> dd >> sim >> mm >> sim >> gggg;
    }
 
    void showdate()const
    {
      publication::showdata();
      char sim = '/';
      wcout << L"Дата выхода: " << dd<<sim<<mm<<sim<<gggg;
        }
};
 
class book : public publication2
{
  private:
    int srtan;
  public:
    void getdata()
    {
      publication2::getdata();
      wcout<<L"Введите колличество страниц в книге: ";
      cin>>srtan;
 
    }
 
    void showdata() const
    {
      publication2::showdata();
      wcout<<L"Колличество страниц: "<<srtan<<L" стр."<<endl;
 
    }
};
 
class type : public publication2
{
  private:
    float min;
  public:
    void getdata()
    {
      publication2::getdata();
      wcout<<L"Введите длинну аудиокниги: ";
      cin>>min;
    }
 
    void showdata() const
    {
      publication2::showdata();
      wcout<<L"Длинна аудиокниги: "<<min<<L" мин."<<endl;
    }
};
 
#pragma argsused
int main(int argc, _TCHAR* argv[])
{
  wcout.imbue(locale(".866"));
 
  type k1;
  book k2;
  k1.getdata();
  k1.showdata();
  k2.getdata();
  k2.showdata();
 
  system("pause");
  return 0;
}
//---------------------------------------------------------------------------
При выполнении publication2::getdata(); выполняется функция publication::getdata(); что в принципе не правильно,но почему не могу разобраться.
Сначала было дано 3 класса : publication,type и book.затем добавил publication2 в котором вводиться дата.
Помогите решить проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выполнение не той функции при наследовании (C++):

Виртуальные функции при наследовании - C++
выдает ошибку на конструктор 2 класса #include &lt;iostream&gt; using namespace std; class A{ protected: int a; ...

Расширение функции при наследовании - C++
Есть класс А - базовый для В, единственное различие в функции Х, Х в В отличается от Х в А только одной последней строчкой кода, как...

Возвращение массива из функции при наследовании - C++
Здравствуйте! У меня есть класс(Circle), который наследуется от нескольких базовых. Мне нужно выполнить определенные вычисления, но...

функции с исключениями в наследовании - C++
почему на такоеstruct B { class S {}; class SS :public S {}; virtual void f()throw(SS) { throw SS(); } }; struct C : public...

Использование шаблонов при наследовании, ошибка при компиляции - C++
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

Ошибка при наследовании - C++
Вот такой код: class Figure2 { protected: int Color; int CenterX; int CenterY; public:

6
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
23.03.2012, 00:13 #2
Цитата Сообщение от Султан Посмотреть сообщение
При выполнении publication2::getdata(); выполняется функция publication::getdata();
так вы сами указали в publication2::getdata() выполнить сначала publication::getdata()
0
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
23.03.2012, 00:20  [ТС] #3
Ну так затем должно выполняться
C++
1
2
3
char sim = '/';
wcout << L"Введите дату в формате dd/mm/gggg\n";
cin >> dd >> sim >> mm >> sim >> gggg;
Но этого не происходит.
0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
23.03.2012, 00:30 #4
void publication::getdata() разве не должна объявляться виртуальной в базовом классе, если планируется переопределения в классе наследнике?
P.S. аналогично нужно virtual и для showdata()
0
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
23.03.2012, 00:35  [ТС] #5
Ем.Я еще не дошел до виртуальных функций)Это будет глывы через 2...А пока что только так умею.

В книге просто сказано создать класс publication2,который бы являлся производным publication,и изменить 2 последних,что бы они стали производными publication2.
0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
23.03.2012, 00:39 #6
Насколько я помню так не правильно, обязательно нужно добавить virtual, иначе бред.
0
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
23.03.2012, 02:51  [ТС] #7
Еще бы знать куда и зачем)И почему оно так не работает.

Добавлено через 1 час 49 минут
Хм.Изменил в наследовании классов public на private, т.е class publication2 : private publication
Стал выдавать ошибку в publication2::getdate();
Просто удалил ее и написал заново...и заработало.Чудеса да и только.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2012, 02:51
Привет! Вот еще темы с ответами:

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Конструкторы при наследовании - C++
Описал большую иерархию классов. Надо написать конструкторы, правда уже не очень понимаю как в Си писать конструкторы, к тому же при...

С++ течет при наследовании - C++
Если был создан класс где его поля размещались в стеке (Foo) и унаследован классом (Foo1) который создается динамически. Как...

Ошибка при наследовании - C++
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
23.03.2012, 02:51
Ответ Создать тему
Опции темы

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