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

Dynamic Cast C++ - C++

Восстановить пароль Регистрация
 
ArtVgd
 Аватар для ArtVgd
1 / 1 / 0
Регистрация: 13.11.2012
Сообщений: 23
13.01.2013, 13:50     Dynamic Cast C++ #1
Прошу объяснить, что я делаю не так..

Есть у меня три класса: Man - базовый, Staff и Student - производные. Виртуализированы.

Далее создаю общий массив указателей Man* Mass, на 8 человек. В него произвольно запихиваю объекты Staff и student: 3 и 5 соотв.

И с помощью цикла хочу отсортировать Staff и Student. Я для этого создаю ещё два массива. (Но может, вы подскажите, как можно не создавать доп. массивы, а как-нибудь сделать лучше?)

И с пом. цикла пытаюсь разнести их по разным массивам:

C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<8; i++)
{
      if(dynamic_cast<Student*>(Mass [i]))
       {
           Mass [i] = stud_temp [l++];
       }
      else
       {
           Mass [i] = prepod_temp [k++];
       }
}
Такой код компилить не хочет, если поставить амперсант перед Mass [i] в условии, то компилит, но не хочет ничего приводить. (Но ведь Mass[i] - это указатель, там не нужен амперсант?!) В чём я туплю?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 13:50     Dynamic Cast C++
Посмотрите здесь:

литература shared objects & dynamic shared objects C++
Создание динамического многомерного массива C++
C++ Что возвращает cast оператор?
Pointers and dynamic arrays C++
Boost C++ lexical cast
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Igor3D
792 / 409 / 33
Регистрация: 01.10.2012
Сообщений: 2,067
13.01.2013, 14:05     Dynamic Cast C++ #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool MyComp( Man * m1, Man * m2 )
{
 int student1 = dynamic_cast <Student *>(m1) != 0; 
 int student2 = dynamic_cast <Student *>(m2) != 0; 
 return student1 < student2;
}
 
std::vector <Man *> vec;
vec.push_back(new Student);
vec.push_back(new Staff);
...
std::sort(vec.begin(), vec.end(), MyComp);  // сортируем - сначала Staff, потом Student

Не по теме:


Хорошим тоном считается начинать все имена классов с одной (большой) буквы, напр CMan, CStudent

soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
13.01.2013, 14:09     Dynamic Cast C++ #3

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
Хорошим тоном считается начинать все имена классов с одной (большой) буквы, напр CMan, CStudent
Весьма сомнительно. Достаточно просто первую букву делать заглавной



Цитата Сообщение от ArtVgd Посмотреть сообщение
И с помощью цикла хочу отсортировать Staff и Student.
У них есть общий признак, по которому их можно сравнить?
ArtVgd
 Аватар для ArtVgd
1 / 1 / 0
Регистрация: 13.11.2012
Сообщений: 23
13.01.2013, 14:13  [ТС]     Dynamic Cast C++ #4
Igor3D, а можно не через вектор? (по заданию, нужен именно обычный массив указателей)
Спасибо.

Добавлено через 51 секунду
soon, признак - это сначала пусть идут Staff, потом - Student, например. Только по названию класса, если так можно выразиться..
Igor3D
792 / 409 / 33
Регистрация: 01.10.2012
Сообщений: 2,067
13.01.2013, 14:26     Dynamic Cast C++ #5
Цитата Сообщение от ArtVgd Посмотреть сообщение
Igor3D, а можно не через вектор? (по заданию, нужен именно обычный массив указателей)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// std::vector <Man *> vec;
// vec.push_back(new Student);
// vec.push_back(new Staff);
// ...
// std::sort(vec.begin(), vec.end(), MyComp);
//
typedef Man * ManPtr;
int numAllocated = 8, count = 0;
ManPtr * arr = new ManPtr[numAllocated];
arr[count++] = new Student;
arr[count++] = new Staff;
...
std::sort(arr, arr + count, MyComp);
Yandex
Объявления
13.01.2013, 14:26     Dynamic Cast C++
Ответ Создать тему
Опции темы

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