Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 15.09.2013
Сообщений: 25
1

Объясните, как в данном примере работают виртуальные функции?

16.05.2014, 15:47. Показов 508. Ответов 3
Метки нет (Все метки)

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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream>
#include <string.h>
 
using namespace std;
 
 
class Toy{
protected:
    char name[80];
    int cost;
    char nameToy[80];
public:
    Toy(){
    }
    Toy(char *name,int cost){
        strcpy(this->name,name);
        this->cost = cost;
    }
    virtual ~Toy()=0
    {
    }
 
    void setName(char *name){
        strcpy(this->name, name);
    }
    void setCost(int cost){
        this->cost = cost; 
    }
    char * getName()
    {
        return name;
    }
    int getcost()
    {
        return cost;
    }
    virtual void input(){
        cout<<"name:";
        cin>> name;
        cout<<"cost:";
        cin>>cost;
    }
    virtual void printData(){
        cout<<nameToy<< " " << name << " " << cost << " ";
    }
};
 
class Product : public Toy{
private:
    int number;
public:
    Product()
    {
        strcpy(nameToy,"Product");
    }
    Product(char *name, int cost, int number): Toy(name,cost)
    {
        strcpy(nameToy,"Product");
        this->number = number;
    }
    void setNumber(int Number)
    {
        this->number = number;
    }
    int getNumber()
    {
        return number;
    }
    void input(){
        Toy::input();
        cout<<"number";
        cin>>number;
    }
    void printData(){
        Toy::printData();
        cout<<number<< endl;
    }
};
 
class Milk : public Toy{
private:
    float ves;
public:
    Milk(){
        strcpy(nameToy,"Milk");
    }
    Milk(char *name, int cost, float ves): Toy(name,cost)
    {
        strcpy(nameToy,"Milk");
        this->ves = ves;
    }
    void setVes(float ves)
    {
        this->ves = ves;
    }
    float getVes()
    {
        return ves;
    }
    void func(){
        cost = 25;
    }
    void input(){
        Toy::input();
        cout<<"ves";
        cin>>ves;
    }
    void printData(){
        Toy::printData();
        cout << ves<<endl;
}
    
 
 
};
 
class Tovar : public Toy{
private: 
        char country[80];
public: 
    Tovar(){
        strcpy(nameToy,"Tovar");
    }
    Tovar(char *name, int cost,char *country): Toy(name,cost)
    {
        strcpy(nameToy,"Tovar");
        strcpy(this->country,country);
            
    }
    void setCountry(char *country)
    {
        strcpy(this->country,country); 
    }
    char * getcCountry()
    {
       return country;
    }
    void input(){
        Toy::input();
        cout<<"country";
        cin>>country;
    }
    void printData(){
        Toy::printData();
        cout<<country<<endl;
    }
};
 
 
 
 
int main()
{
  const int N=5;
  Toy *Toys[N];
   for(int i = 0; i<N; i++){
    cout<<"just-1; Milk - 2; Tovar - 3"; 
    Toy *curr;
    int cd;
    cin>> cd;
    switch(cd){
case 1:
        curr= new Product();
        break;
 
case 2:
    curr= new Milk();
    break;
case 3: 
    curr= new Tovar();
    break;
default: 
    curr= new Product();
 
   }
    curr->input();
    Toys[i]= curr;
   }
for (int i=0;i<N; i++)
Toys[i]->printData();
 
   
    system("pause");
    return 0;
}
0
16.05.2014, 15:47
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2014, 15:47
Ответы с готовыми решениями:

Объясните, как в данном примере работает friend
friend bool operator== (const String&amp; firstStr, const String&amp; secondStr); Если писать код без friend, то возникает ошибка: ...

Объясните на данном примере как работать с композицией
Не могу понять как работать с композицией. А именно вывод интересует. Что я делаю не так?#include &lt;iostream&gt; using namespace std; ...

Объясните, как в данном примере функционирует работа операторов
Всем доброго времени суток. У меня такoй вoпрос не могу понять как в данном примере функционирует работа split 2,FN$abc,4, и как происходят...

3
 Аватар для oxyfat
68 / 65 / 21
Регистрация: 01.05.2014
Сообщений: 247
16.05.2014, 16:50 2
Просто. Компилятор рассчитывает "виртуальность" по-своему.
0
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,426
16.05.2014, 16:56 3
без виртуальных вызов input и printData будет приводить к тому к чему он приводит в базовом классе потому как указатель на базовый. с виртуальными - эти вызовы будут такими какими их "делает" производный класс не смотря на то что указатель на базовый
0
 Аватар для Kuzia domovenok
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,521
Записей в блоге: 1
16.05.2014, 17:04 4
"товар наследуется от игрушки", "молоко наследуется от игрушки", "продукт наследуется от игрушки"...
просто ахтунг!
0
16.05.2014, 17:04
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2014, 17:04
Помогаю со студенческими работами здесь

Объясните работу с интерфейсами в данном примере
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Observer { class...

Объясните подробно , пожалуйста , каким образом работает цикл for на данном примере
Значение переменной p, которое будет выведено в ячейку F1Book после выполнения фрагмента программы равно var i,j,t,p:integer; begin...

Как перенести значение переменной из одной функции в другую на данном примере
Как из функции change взять переменную indexImg(именно то значение, которое она приняла в данный момент) и внедрить эту переменную с ее...

Виртуальные функции, таблицы виртуальных методов, как они работают?
подскажите пожалуйста,где лучше посмотреть про начинку виртуальных функций,т.е. про таблицы виртуальных методов и как они работают. Заранее...

Объясните использование "double" в данном примере
#include &lt;stdio.h&gt; #include &lt;math.h&gt; int main(void) { int a,b,c; scanf(&quot;%d %d %d&quot;,&amp;a,&amp;b,&amp;c); // x*x*x +...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru