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

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

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

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

24.01.2014, 13:00. Просмотров 280. Ответов 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" размерности на разные объекты?

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

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Реализовать структуру "Анкета" с полями "Фамилия", "Пол" и "Адрес" - C++
Здравствуйте. Проходим тему Структуры, не могу понять, как определить количество, само задание: #include &lt;iostream&gt; #include...

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout - C++
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов- справочник телефонный, с именем и фамилией. ...

Создать классы "Computer", "Software", "User" и реализовать взаимодействие объектов этих типов между собой - C++
Помогите решить задачку,нужна в инст на экзамен. Составить программу реализующую: 1)классы,которые могут содержать...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

5
Alex5
1075 / 739 / 115
Регистрация: 12.04.2010
Сообщений: 1,895
24.01.2014, 14:45 #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()*/
1
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
24.01.2014, 15:34  [ТС] #3
Спасибо. Работает)
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
24.01.2014, 16:05 #4
Нужен не массив cbase, а массив указателей на cbase
0
Убежденный
Ушел с форума
Эксперт С++
15691 / 7201 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.01.2014, 16:21 #5
И у базового класса должен быть виртуальный деструктор.
Иначе при удалении наследника через указатель на базу может
случиться всякое (по стандарту - поведение не определено).
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.01.2014, 18:09 #6
Цитата Сообщение от Alex5 Посмотреть сообщение
C++
1
2
temp = (CBase **)malloc(m_count*sizeof(CBase*)); /* массив указателей на CBase */ 
temp[i] = new X;
совершенно не понятно, зачем смешивать new/malloc.
0
24.01.2014, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 18:09
Привет! Вот еще темы с ответами:

Стек или куча: как "правильно" создавать объекты классов? - C++
У меня несколько странновато-ламерский вопрос, но ведь в том и смысл: чтобы таких вопросов не осталось, на них один фиг сначала нужно...

Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата" - C++
Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для него конструктор по умолчанию,...

вывести на друк слово "Одинаковые" если эти массивы полностью совпадают,и слово "Разные" в противоположном случае. - C++
Создать два символьных массива по 12 элементов , и вывести на друк слово &quot;Одинаковые&quot; если эти массивы полностью совпадают,и слово &quot;Разные&quot;...

Как верно выводить указатель на двумернный массив "треугольного" типа? - C++
Суть: необхоидмо создать функцию, которая возвращала бы указатель на двумерный массив &quot;треугольного&quot; типа из n строк: x xx xxx ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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