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

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

Войти
Регистрация
Восстановить пароль
 
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
#1

Как реализовать указатель "n" размерности на разные объекты? - C++

24.01.2014, 13:00. Просмотров 256. Ответов 5
Метки нет (Все метки)

C++ (Qt)
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
Подскажите как реализовать следующее:
 
//есть базовый класс у которого куча производных классов с перегруженными вируальными функциями.
 
class CBase
{
......
virtual int begin();
}
 
class A : public CBase
{
........
virtual int begin();
}
............................
............................ // для примера весь алфовит)
............................
class Z : public CBase
{
.......
virtual int begin();
}
 
// и есть класс который содержит неопределенное количество этих производных классов.
// Но работает он постоянно с одной  и той же функцией этих классов.
 
class CRezult
{
protected:
   CBase             *temp; 
   int                    data;
   int                    m_count;
public: 
   CRezult(void);
   CRezult(int param, int count)
       {
              m_count = count; 
              temp = (CBase *)malloc(m_count*sizeof(CBaze))  // здесь тоже очень сомнительно
              //
             
              for (int i = 0; i<m_count; i++)              
              switch (param) 
                    {
                          ...........
                          case.........: temp[i] = *new X;
                          case ....... : temp[i] = *new Z;
                    }
         }
 
    void read()
           {
                  for(i=.......)data += temp[i]->begin();
            } //суть вот в этой функции т.к. обращение идет к базовому методу, а надо к производному! 
 
//есть такой способ ((DeriveClass *)temp[i])->begin(); хотя это работает, но это не подходит!
}
Вопрос звучит так как реализовать указатель "n" размерности на разные объекты?

и таких указателей надо много. может есть другие варианты реализации подобного?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 13:00     Как реализовать указатель "n" размерности на разные объекты?
Посмотрите здесь:

как реализовать перегрузку опрератора "="? C++
C++ хочу попробовать всунуть "for (int j=0; j<5; j++)" в cin. Как это можно реализовать?
C++ "Классы и объекты" -"операторы"
Делаю простой текстовый редактор. Как реализовать в нём пункт "Заменить" как в блокноте? C++
C++ Как реализовать вызов "переменной" функции?
C++ Как реализовать "Жизнь" по другому?
C++ Как реализовать взаимодействие классов в игре "Змейка"
Как возможно реализовать алгоритм сортировки "выбором" для строк матрицы? C++
У меня в задании "Parser xml нужно реализовать самостоятельно." - это как? C++
Класс "Время", как реализовать работу со временем? C++
C++ Как реализовать AI в игре "Морской бой"
Как можно реализовать на C++ "Игру жизни Конвея" (Conway's Game of Life)? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex5
1017 / 680 / 99
Регистрация: 12.04.2010
Сообщений: 1,715
24.01.2014, 14:45     Как реализовать указатель "n" размерности на разные объекты? #2
Цитата Сообщение от FinancialShark Посмотреть сообщение
void read()
{
for(i=.......)data += temp[i]->begin();
} //суть вот в этой функции т.к. обращение идет к базовому методу, а надо к производному!
Так как temp[i] имеет тип CBase, то здесь ( temp[i]->begin(); ) будет ошибка компиляции.
Чтобы temp[i]->begin(); вызывал метод производного класса, temp[i] должен быть указателем, а функция begin() - public и virtual.
C++
1
2
3
4
CBase** temp;
temp = (CBase **)malloc(m_count*sizeof(CBase*)); /* массив указателей на CBase */
temp[i] = new X;
temp[i]->begin(); /* здесь будет вызвана виртуальная функция X::begin()*/
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
24.01.2014, 15:34  [ТС]     Как реализовать указатель "n" размерности на разные объекты? #3
Спасибо. Работает)
Kuzia domovenok
1887 / 1742 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
24.01.2014, 16:05     Как реализовать указатель "n" размерности на разные объекты? #4
Нужен не массив cbase, а массив указателей на cbase
Убежденный
Системный программист
Эксперт С++
14890 / 6708 / 1059
Регистрация: 02.05.2013
Сообщений: 11,000
Завершенные тесты: 1
24.01.2014, 16:21     Как реализовать указатель "n" размерности на разные объекты? #5
И у базового класса должен быть виртуальный деструктор.
Иначе при удалении наследника через указатель на базу может
случиться всякое (по стандарту - поведение не определено).
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.01.2014, 18:09     Как реализовать указатель "n" размерности на разные объекты? #6
Цитата Сообщение от Alex5 Посмотреть сообщение
C++
1
2
temp = (CBase **)malloc(m_count*sizeof(CBase*)); /* массив указателей на CBase */ 
temp[i] = new X;
совершенно не понятно, зачем смешивать new/malloc.
Yandex
Объявления
24.01.2014, 18:09     Как реализовать указатель "n" размерности на разные объекты?
Ответ Создать тему
Опции темы

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