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

Абстрактные классы - C++

Восстановить пароль Регистрация
 
dmal
 Аватар для dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 139
11.03.2013, 15:56     Абстрактные классы #1
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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 15:56     Абстрактные классы
Посмотрите здесь:

C++ Абстрактные классы
Абстрактные классы C++
C++ Абстрактные классы
C++ Абстрактные классы
Абстрактные классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
11.03.2013, 16:01     Абстрактные классы #2
dmal, вот почему:
C++
1
for(int i = 0; i < count; i++)
lim не используется нигде

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

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

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

Добавлено через 3 минуты
Цитата Сообщение от ITcrusader Посмотреть сообщение
Вопрос не особо связан с абстрактными классами
Вопрос не связан, а проблема думаю да. Сделаю догадку, что dmal в MyFunction функцию Calculate() не сделал виртуальной, от этого и проблемы.
Просьба dmal выставить описание классов.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.03.2013, 16:21     Абстрактные классы #4
Цитата Сообщение от 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. Вопрос не особо связан с абстрактными классами)
вопрос связан, исходя из приведенного кода, с наследованием и виртуальными функциями
dmal
 Аватар для dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 139
11.03.2013, 18:26  [ТС]     Абстрактные классы #5
Цитата Сообщение от 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;
}
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.03.2013, 18:36     Абстрактные классы #6
может Вы уже объясните в чем у вас проблема, что не понятно, или что не работает или еще что то?)
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.03.2013, 19:12     Абстрактные классы #7

Не по теме:

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


Цитата Сообщение от dmal Посмотреть сообщение
За что отвечает lim?
Переменная lim "отвечает" за максимальное количество элементов в массиве.
Цитата Сообщение от dmal Посмотреть сообщение
почему при lim = 1 программа все равно работает как и при lim = 100?
Потому что выделяемая память по великому зело оказалась доступной на запись благодаря особенностям работы менеджера памяти. Не факт, что такой вариант с lim = 1 при трех элементах, заработает на другой ОС или даже с другим компилятором или даже на другом компьютере.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2013, 19:43     Абстрактные классы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
dmal
 Аватар для dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 139
11.03.2013, 19:43  [ТС]     Абстрактные классы #8
Цитата Сообщение от lemegeton Посмотреть сообщение

Не по теме:

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



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

Потому что выделяемая память по великому зело оказалась доступной на запись благодаря особенностям работы менеджера памяти. Не факт, что такой вариант с lim = 1 при трех элементах, заработает на другой ОС или даже с другим компилятором или даже на другом компьютере.
Спасибо за ответ... просто смутило то, что при значении 1 он все равно работал...
Yandex
Объявления
11.03.2013, 19:43     Абстрактные классы
Ответ Создать тему
Опции темы

Текущее время: 13:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru