Форум программистов, компьютерный форум 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 с целыми коэффициентами можно представить в виде списка, причем если ai=0, то соответствующее звено не включать в список. Определить логическую функцию Equal(p, q), проверяющие на равенство многочлены p и q не доходит до меня то, как можно проверить элементы списка по...
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; virtual void rotation() = 0; };
C++ Опишите пожалуйста мою программу Может кто рассказать что и как делает программа,и написать комментарии?\ Буду очень признателен #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<fstream.h> #include<string.h> #include<iomanip.h> #include<stdio.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;
}
 
Текущее время: 00:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru