Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для dmal
10 / 10 / 4
Регистрация: 19.02.2013
Сообщений: 140

Абстрактные классы

11.03.2013, 15:56. Показов 1162. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void _tmain()
{
    const int lim = 100;
    MyFunction *pFunc [lim];
    int count = 0;
 
    pFunc[count++] = new My_Exp;
    pFunc[count++] = new Line;
    pFunc[count++] = new My_KX;
 
    for(int i = 0; i < count; i++)
       pFunc[i]->Calculate();
 
    for(int i = 0; i < count; i++)
       delete pFunc[i];
 
    _getch();
}
За что отвечает lim? и почему при lim = 1 программа все равно работает как и при lim = 100?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2013, 15:56
Ответы с готовыми решениями:

Абстрактные классы
Объясните пожалуйста почему это не работает и как исправить? cannot declare variable 'b1' to be of abstract type 'classB' because the...

абстрактные классы
Здрасте я при написании программы столкнулся с проблемой что немогу создать указатель на объект т.к. класс абстрактный прошу помогите...

абстрактные классы
компилятор ругается когда я пытаюсь записать объект класса!!!! подскажите что я не правильно делаю!! #include &lt;cstdlib&gt; ...

7
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
11.03.2013, 16:01
dmal, вот почему:
C++
1
for(int i = 0; i < count; i++)
lim не используется нигде

count = 0 задано. Ни одной итерации не проходит

P.S. Вопрос не особо связан с абстрактными классами)
0
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
11.03.2013, 16:14
Цитата Сообщение от ITcrusader Посмотреть сообщение
count = 0 задано. Ни одной итерации не проходит
В стоках 7-9 три раза вызывается count++, т.е. в итоге count = 3

Добавлено через 4 минуты
lim - по ходу от слова лимит, т.е. отвечает за максимальное количество элементов.

Добавлено через 3 минуты
Цитата Сообщение от ITcrusader Посмотреть сообщение
Вопрос не особо связан с абстрактными классами
Вопрос не связан, а проблема думаю да. Сделаю догадку, что dmal в MyFunction функцию Calculate() не сделал виртуальной, от этого и проблемы.
Просьба dmal выставить описание классов.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
11.03.2013, 16:21
Цитата Сообщение от dmal Посмотреть сообщение
MyFunction *pFunc [lim];
вот тут и используется у тебя создается массив указателей на базовый класс, потом ты создаешь по каждому из указателей объекты классов потомков, и вызываешь их виртуальный метод Calculate()
Цитата Сообщение от dmal Посмотреть сообщение
и почему при lim = 1 программа все равно работает как и при lim = 100?
это тебе просто везет, ты при lim = 1 выделяешь память только под один указатель, но записываешь в 3 элемента, видимо просто есть доступ к памяти, хотя в реальности там 1 элемент, и к тому же ты можешь залезть в память чужой переменной и изменить ее, поэтому аккуратнее с такими конструкциями

Добавлено через 3 минуты
Цитата Сообщение от StasGamilton Посмотреть сообщение
Вопрос не связан, а проблема думаю да. Сделаю догадку, что dmal в MyFunction функцию Calculate() не сделал виртуальной, от этого и проблемы.
а какая у него проблема? лично я не видел ее описания,

Цитата Сообщение от ITcrusader Посмотреть сообщение
count = 0 задано. Ни одной итерации не проходит
а эта строчка разве не увеличит count?

Цитата Сообщение от dmal Посмотреть сообщение
C++
1
pFunc[count++] = new My_Exp;
Цитата Сообщение от ITcrusader Посмотреть сообщение
P.S. Вопрос не особо связан с абстрактными классами)
вопрос связан, исходя из приведенного кода, с наследованием и виртуальными функциями
0
 Аватар для dmal
10 / 10 / 4
Регистрация: 19.02.2013
Сообщений: 140
11.03.2013, 18:26  [ТС]
Цитата Сообщение от StasGamilton Посмотреть сообщение
Просьба dmal выставить описание классов.
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
#ifndef FUNCTION_H
#define FUNCTION_H
class MyFunction{
    public:
       virtual ~MyFunction(void){}
       virtual char* GetName() = 0;
       virtual void Calculate() = 0;
    protected:
       double x;
};
#endif
 
 
#include <iostream.h>
#include <Math.h>
class My_LogAB: public MyFunction{
    public:
       My_LogAB(): name("Log(A, B)"){}
       char* GetName(){return name;}
       void Calculate();
    protected:
       char* name;
       double a;
       double b;
};
 
void My_LogAB::Calculate(){
   cout << "Calcutation for function y = " << name << endl;
   cout << "Enter a = "; cin >> a;
   cout << "Enter b = "; cin >> b;
   cout << "y = " << log(b) / log(a) << endl;
}
 
#include <iostream.h>
#include <Math.h>
class My_Exp: public MyFunction{
    public:
       My_Exp(): name("e ^ x"){}
       char* GetName(){return name;}
       void Calculate();
    protected:
       char* name;
};
 
void My_Exp::Calculate(){
   cout << "Calcutation for function y = " << name << endl;
   cout << "Enter x = "; cin >> x;
   cout << "y = " << exp(x) << endl;
}
 
 
#include <iostream.h>
#include <Math.h>
class Line: public MyFunction{
    public:
       Line(): name("a * x + b"){}
       char* GetName(){return name;}
       void Calculate();
    protected:
       char* name;
       double a;
       double b;
};
 
void Line::Calculate(){
   cout << "Calcutation for function y = " << name << endl;
   cout << "Enter a = "; cin >> a;
   cout << "Enter b = "; cin >> b;
   cout << "Enter x = "; cin >> x;
   cout << "y = " << (a * x + b) << endl;
}
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
11.03.2013, 18:36
может Вы уже объясните в чем у вас проблема, что не понятно, или что не работает или еще что то?)
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
11.03.2013, 19:12

Не по теме:

Хрустальный шар показывает, что ТС не совсем сам пишет, а препод задает каверзные вопросы.


Цитата Сообщение от dmal Посмотреть сообщение
За что отвечает lim?
Переменная lim "отвечает" за максимальное количество элементов в массиве.
Цитата Сообщение от dmal Посмотреть сообщение
почему при lim = 1 программа все равно работает как и при lim = 100?
Потому что выделяемая память по великому зело оказалась доступной на запись благодаря особенностям работы менеджера памяти. Не факт, что такой вариант с lim = 1 при трех элементах, заработает на другой ОС или даже с другим компилятором или даже на другом компьютере.
0
 Аватар для dmal
10 / 10 / 4
Регистрация: 19.02.2013
Сообщений: 140
11.03.2013, 19:43  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение

Не по теме:

Хрустальный шар показывает, что ТС не совсем сам пишет, а препод задает каверзные вопросы.



Переменная lim "отвечает" за максимальное количество элементов в массиве.

Потому что выделяемая память по великому зело оказалась доступной на запись благодаря особенностям работы менеджера памяти. Не факт, что такой вариант с lim = 1 при трех элементах, заработает на другой ОС или даже с другим компилятором или даже на другом компьютере.
Спасибо за ответ... просто смутило то, что при значении 1 он все равно работал...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2013, 19:43
Помогаю со студенческими работами здесь

Абстрактные классы
Народ, вопрос есть такой. Есть абстрактный класс class A { protected: int a; public: A(int b=0):a(b) {

Абстрактные классы
Помогите пожалуйста, сообразить не могу. Есть абстрактный класс. У него есть метод, чтение из файла. Есть производный от него класс....

Абстрактные классы
Ребята! Помогите с таким делом. Мне дали задание создать абстрактный класс Автомобиль, классы наследники: гоночный автомобиль, асфальтный...

Абстрактные классы
Есть 3 абстракции, линия(бесконечная), луч(бесконечен в одну сторону) и отрезок (ограничен). Разобрать иерархию классов. Срочно код...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru