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

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

Войти
Регистрация
Восстановить пароль
 
dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 140
#1

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

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

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

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

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

Абстрактные классы - C++
В общем есть у нас 2 абстрактных класса CA и CB и 2 дочерних от них класса CC и CD. Как сделать так чтобы CD наследовал CB поверх которого...

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

Абстрактные классы - C++
Помогите плиз, экзаменационное задание, а разобраться не могу с ним: Создать консольное приложение, в котором реализовать работу...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
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
Эксперт по пяченькам
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
642 / 563 / 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
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 140
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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.03.2013, 18:36     Абстрактные классы #6
может Вы уже объясните в чем у вас проблема, что не понятно, или что не работает или еще что то?)
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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++
Помогите пожалуйста!!! Лабораторная работа по ООП. Тема: Абстрактные классы. Интерфейсы. Цель: получить навыки создания иерархии...

Абстрактные классы наследия. - C++
Ребят подскажите пожалуйста как мне написать чтобы в классе С виртуальные функции класса B заменялись функциями класса А. можно ли так...

Абстрактные базовые классы - C++
Не могу создать экземпляр производного от АБК класса: #pragma once class BaseEllips { private: double x; double y; public: ...


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

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

Не по теме:

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



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

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

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