Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001

Идентификация наследованных классов

26.11.2014, 12:00. Показов 1444. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть небольшая иерархия классов типа:
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
class Interface //абстрактный
{
public:
    static const int ID = 0;
    ...
}
 
class Base : Interface { ... }
 
class Derived1 : Base 
{
public:
    static const int ID = 1;
    ...
}
 
class Derived2 : Base 
{
public:
    static const int ID = 2;
    ...
}
 
class Derived3 : Derived2
{
public:
    static const int ID = 3;
    ...
}
я делаю сериализацию данных классов, у меня есть указатели типа Interface* которые инициализированы одним из классов Derived, и мне надо проидентифицировать какой я класс сохраняю (и соответственно идентификатор сохранить для последующей загрузки), но вот проблема я все время получаю по указателю ID = 0, т.е. ID от Interface как мне сделать правильно???
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2014, 12:00
Ответы с готовыми решениями:

Перегрузка операторов для наследованных классов
Есть один класс, для него определена операция сложения. Есть так же наследованный класс для него работает операция сложения определенная...

Последовательность выполнения для наследованных внутренних классов
class Egg2 { protected class Yolk { public Yolk() { print("Egg2.Yolk()"); } public void f() {...

На основе указанных классов создать набор классов с использованием множественного наследования
Создать базовый класс «Транспорт» и производные от него классы «Автомобиль», «Поезд», «Самолет». Создать базовый класс «Тип» и производные...

4
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.11.2014, 12:10
C++
1
virtual void GetID() {return ID; }
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
26.11.2014, 12:24  [ТС]

Не по теме:

да кто все время помечает лучшие ответы в моих темах раньше чем я их прочитать успеваю?


rikimaru2013, пробовал уже, не помогает
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.11.2014, 12:47
Лучший ответ Сообщение было отмечено Dark Byte как решение

Решение

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
#include <iostream>
using namespace std;
 
class Interface //абстрактный
{
private:
    static const int ID = 0;
public:
    virtual int ReturnThisClassesID()       { return ID; }
 
};
 
class Base : public Interface 
{ 
private:
 
public:
    virtual int ReturnThisClassesID()       { return -1; }
};
 
class Derived1 : public Base
{
private:
    static const int ID = 1;
public:
    virtual int ReturnThisClassesID()       { return ID; }
};
 
class Derived2 : public Base
{
private:
    static const int ID = 2;
public:
    virtual int ReturnThisClassesID()       { return ID; }
};
 
class Derived3 : public Derived2
{
private:
    static const int ID = 3;
public:
    virtual int ReturnThisClassesID()       { return ID; }
};
void main()
{
    Interface** arr = new Interface*[10];
 
    arr[0] = new Interface();
    arr[1] = new Base();
    arr[2] = new Derived1();
    arr[3] = new Derived2();
    arr[4] = new Derived3();
 
 
    for (int i = 0; i < 5; i++)
    {
        cout << "ID: "<< arr[i]->ReturnThisClassesID() << endl;
    }
}
1
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
26.11.2014, 13:01  [ТС]
rikimaru2013, а ну вот вроде теперь работает... я не знал что у Base тоже надо объявлять этот метод... разве он не должен был пронаследоваться "сквозь" класс от Interface?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2014, 13:01
Помогаю со студенческими работами здесь

Разработать систему классов по заданной теме. Обеспечить соответствующую функциональность классов
Блин, люди, помоги с задачей :( А то зачет не поставят :( Разработать систему классов по заданной теме. Обеспечить соответствующую...

Массив разных классов. Как добратся до всех полей этих классов?
Все классы имеют общего предка. Экземпляры этих классов запихнуты в один массив нужно както добраться до полей и методов которые...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс CGraphicsObject, его наследник - базовый...

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru