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

Инкапсуляция, иттераторы, абстрактные списки на С - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В MVS использование генератора случайных чисел http://www.cyberforum.ru/cpp-beginners/thread168750.html
Задача такова - Даны n прямоугольников со сторонами, параллельными осям координат, заданных координатами своей левой нижней и правой верхней вершин и m точек. Найти пару прямоугольник - точка, для...
C++ Упорядочивание массива дан массив вещественных чисел требуется написать функции, которые 1. упорядочивают по убыванию 2.упорядочивают по возрастанию 3.создадут новый массив, элементы которого будут те элементы первого... http://www.cyberforum.ru/cpp-beginners/thread168747.html
размещение файлов в оперативной памяти C++
Я бы хотел узнать, есть ли способ разместить в оперативной памяти какие нибудь файлы. Например текстовый и какой нибудь исполнительный exe файл, который делает с текстовым определенные действия....
про списки и многочлен C++
добрый вечер.тут до завтра задачку решить надо.не очень понимаю само условие. Многочлен P(x)=anxn + an-1xn-1 +...+ a1x + a0 с целыми коэффициентами можно представить в виде списка, причем если...
C++ Абстрактный класс. Наследование http://www.cyberforum.ru/cpp-beginners/thread168723.html
class polygon{ int height, width, point p; e_color color; public: virtual ~polygon(){} virtual void draw() = 0; virtual void move() = 0; ...
C++ Опишите пожалуйста мою программу Может кто рассказать что и как делает программа,и написать комментарии?\ Буду очень признателен #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<fstream.h>... подробнее

Показать сообщение отдельно
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
28.09.2010, 03:07
Цитата Сообщение от Selina Посмотреть сообщение
А вот обойтись без разыменовывания, а заменить это указателем на функции, я не представляю.
Эмулировать полиморфизм с таблицей виртуальных функций. Делается все это долго и нудно. Посмотри на вот этот пример:
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
#include <stdio.h>
#include <stdlib.h>
 
// forward declaring the animal class
struct animal;
typedef struct animal animal;
 
// animal virtual table
typedef struct
{
    int  (*energy_level) (animal * self);
    void (*feed)         (animal * self, int food);
    void (*run)          (animal * self, int time);
    void (*delete)       (animal * self);
} animal_vtbl;
 
// animal class, abstract
struct animal
{
    animal_vtbl * vtbl;
};
 
// animal method dispatchers
int energy_level(animal * self)
{
    return self->vtbl->energy_level(self);
}
 
void feed(animal * self, int food)
{
    self->vtbl->feed(self, food);
}
 
void run(animal * self, int time)
{
    self->vtbl->run(self, time);
}
 
void delete(animal * self)
{
    self->vtbl->delete(self);
}
 
// lion class, derives from animal
typedef struct 
{
    animal  base;
    int     energy;
} lion;
 
// lion virtual method overrides
int lion_energy_level(lion * self)
{
    return self->energy;
}
 
void lion_feed(lion * self, int food)
{
    if (self->energy >= 0)
        self->energy += food;
}
 
void lion_run(lion * self, int time)
{
    self->energy -= time;
    if (self->energy < 0)
        self->energy = -1;
}
 
void lion_delete(lion * self)
{
    free(self);
}
 
// lion virtual table
static animal_vtbl lion_vtbl =
{
    lion_energy_level
  , lion_feed
  , lion_run
  , lion_delete
};
 
// lion constructor
animal * lion_create(int energy)
{
    lion * l = calloc(1, sizeof(lion));
    l->base.vtbl = &lion_vtbl;
    l->energy = energy;
    return &l->base;
}
 
int main()
{
    animal * a = lion_create(10);
    printf("initial lion's energy: %d\n", energy_level(a));
    run(a, 5);
    printf("lion's energy after running for %d hours: %d\n", 5, energy_level(a));
    feed(a, 2);
    printf("lion's energy after feeding: %d\n", energy_level(a));
    delete(a);
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru