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

Есть ли элемент который возвращает инфу на какой элемент иерархии - C++

Восстановить пароль Регистрация
 
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 20:28     Есть ли элемент который возвращает инфу на какой элемент иерархии #1
... Поинтор сейчас поинтит ???


Допустим есть Абстрактный папа
я делаю в мейне поинтор этого папы заряжаю его на какого ниб ребенка
и вызываю всякие там виртуальные функции которые переводятся на ребенка с которым я сейчас работаю через пойтор

так вот... как мне вернуть инфу на какого ребенка сейчас отцовский поитер направлен
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 20:28     Есть ли элемент который возвращает инфу на какой элемент иерархии
Посмотрите здесь:

какой-то элемент массива равен 1. Теперь мне нужно добавить к этому элементу 0 так, чтобы элемент массива стал равен 10(не десять, а единица и ноль C++
C++ Найти нулевой(ые) элемент(ы) в матрице, вывести на пересечение какой строки и столбца располагается(ются) этот(эти) элемент(ы)
C++ Какой элемент останется в кольце последним, если начать по очереди удалять из списка каждый n элемент
Строки. Как найти в слове первый элемент? Второй элемент, последний элемент? C++
Найти самый наименьший элемент в матрице, и найти сумму столбца который стоит этот наименьший найденный элемент C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:02     Есть ли элемент который возвращает инфу на какой элемент иерархии #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ

Не по теме:

Что не пост, то лингвистическая загадка :) (No offense intended.)



Если знаете тип, то dynamic_cast<дочерний класс>, но это очевидно.

Если именно узнать динамический тип, то тут вас спасёт (?) через-жопу-работающая остальная часть RTTI: делаете typeid(дочерний объект), получаете на руки std::type_info. С type_info можно (нормально) делать только две вещи. Сравнивать с другим type_info, но только "равно — не равно", другого нет. И получить его имя в виде ASCIIZ-строки, но что там именно написано, определяется реализацией. Так что полагаться на него нельзя, это максимум чтоб вывести на экран.

В Си++ нет (встроенной) рефлексии. Если хочется — зафичьте отцовскому классу свою виртуальную функцию getType(), которая будет возвращать какой-нибудь enum с тегом типа, переопределите её в дочерних на нужный ChildType_n.

Но даже в таком варианте оно выглядит ужасно. Так что ещё лучше придумать какое-нибудь другое решение возникшей проблемы.
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 22:38  [ТС]     Есть ли элемент который возвращает инфу на какой элемент иерархии #3
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение

Не по теме:

Что не пост, то лингвистическая загадка :) (No offense intended.)



Если знаете тип, то dynamic_cast<дочерний класс>, но это очевидно.

Если именно узнать динамический тип, то тут вас спасёт (?) через-жопу-работающая остальная часть RTTI: делаете typeid(дочерний объект), получаете на руки std::type_info. С type_info можно (нормально) делать только две вещи. Сравнивать с другим type_info, но только "равно — не равно", другого нет. И получить его имя в виде ASCIIZ-строки, но что там именно написано, определяется реализацией. Так что полагаться на него нельзя, это максимум чтоб вывести на экран.

В Си++ нет (встроенной) рефлексии. Если хочется — зафичьте отцовскому классу свою виртуальную функцию getType(), которая будет возвращать какой-нибудь enum с тегом типа, переопределите её в дочерних на нужный ChildType_n.

Но даже в таком варианте оно выглядит ужасно. Так что ещё лучше придумать какое-нибудь другое решение возникшей проблемы.

Короче тупо самому написать виртуальную функцию...
а ля
C++
1
2
void get_info(){
cout << "i'm childer 1 "; }

Не по теме:


))))) сорри )



ооо я у кого подсмотрел в свое время вот такой кусок...
C++
1
2
3
4
5
    const std::type_info &obj_type_info = ShapeType_Returner_withChoosenShape.type();   // Captures the type
            std::cout   << "\n\n The created figure type is an object of the "    // Calls its names and prints it
                        << obj_type_info.name() 
                        << "> "
                        << std::endl;
и как это пересобачить под пойнтер ??? в данном куске все дело спасает функция .type() (это функция от boost::variant )
кстати насколько я помню он что то даже адекватное возвращал а ля имя класса...
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 23:00     Есть ли элемент который возвращает инфу на какой элемент иерархии #4
Ага. Такую функцию.

> и как это пересобачить под пойнтер ???
Можно привести пример желаемого кода, который бы решал нужную задачу, который бы вы написали, если бы оно всё "пересобачилось"?
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 23:34  [ТС]     Есть ли элемент который возвращает инфу на какой элемент иерархии #5
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ага. Такую функцию.

> и как это пересобачить под пойнтер ???
Можно привести пример желаемого кода, который бы решал нужную задачу, который бы вы написали, если бы оно всё "пересобачилось"?

main.cpp
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
 
#include <sstream>
 
 
using namespace std; 
 
 
 
 
class base 
{
public   : 
    int x; 
    int y ; 
 
public : 
    
    base(){};
    base(int new_x, int new_y) : x(new_x), y (new_y){}; 
 
        virtual void  calc () = 0; 
            
            // cout << "\n if you see this line something wrong "; 
            
 
 
    friend std::ostream& operator << (std::ostream& out ,const  base& objA)
    {
        
        return  out  << "x: "<<  objA.x<< "y:" <<  objA.y; 
        
    }
 
 
};
 
 
class A : public base 
{
public   : 
    int x; 
    int y ; 
 
public : 
    
    A(){};
    A(int new_x, int new_y) : x(new_x), y (new_y){}; 
 
        void   calc ()
            {
            cout  <<"\n "<<   x*y; 
            }
 
 
    friend std::ostream& operator << (std::ostream& out ,const  A& objA)
    {
        
        return  out  << "x: "<<  objA.x<< "y:" <<  objA.y; 
        
    }
 
 
};
 
 
class B : public base 
{
public   : 
    int x; 
    int y ; 
 
public : 
    
    B(){};
    B(int new_x, int new_y) : x(new_x), y (new_y){}; 
 
         void  calc ()
            {
            cout <<"\n "<<   x*y*55; 
            }
 
    
    friend std::ostream& operator << (std::ostream& out ,const  B& objB)
    {
        
        return  out  << "x!!!: "<<  objB.x<< "y!!!:" <<  objB.y; 
        
    }
 
 
};
 
 
 
 
 
 
 
 
int main ()
 
{
    
 
    
 
    
    base * bb_father ;
 
    A aa(12,32); 
 
     B bb(2322,444); 
 
    bb_father = &aa; 
 
    cout << "\n from A ";
    bb_father->calc(); 
 
 
 
 
    bb_father = &bb;
    cout << "\n from B ";
    bb_father->calc(); 
    cout <<"\n "; 
    cout <<"\n "; 
    
return 0 ;
}


Не по теме:

подскажите плиз хот кейс для ребилд онли в MS VS 2010 rebuild hot keys = ctrl + alt + F7

OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 23:43     Есть ли элемент который возвращает инфу на какой элемент иерархии #6
Эм, и что эта программа должна выводить? 12*32 и 2322*444? Так она вроде это и сейчас делает.
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 23:50  [ТС]     Есть ли элемент который возвращает инфу на какой элемент иерархии #7
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Эм, и что эта программа должна выводить? 12*32 и 2322*444? Так она вроде это и сейчас делает.
так нет вопрос в том как сделать так чтоб она еще и выводила на какой класс папа сейчас поинтит
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 23:53     Есть ли элемент который возвращает инфу на какой элемент иерархии #8
Ну вон же решение с виртуальной функцией. Каждому дочернему классу делаете свою специализацию. Нормальной рефлексии нет, так что так.
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.09.2012, 23:55  [ТС]     Есть ли элемент который возвращает инфу на какой элемент иерархии #9
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ну вон же решение с виртуальной функцией. Каждому дочернему классу делаете свою специализацию. Нормальной рефлексии нет, так что так.



а я думал у тебя / вас мысля пришла... поэтому код запросил(и)
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.09.2012, 00:11     Есть ли элемент который возвращает инфу на какой элемент иерархии #10
Цитата Сообщение от Leeto Посмотреть сообщение
так вот... как мне вернуть инфу на какого ребенка сейчас отцовский поитер направлен

по индексу :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
    base * bb_father[ 2 ] ;
 
    bb_father[ 0 ] = new A( 12, 33);
    bb_father[ 1 ] = new B( 23,  44); 
  
 
    cout << "\n from A ";
    bb_father[ 0 ]->calc(); 
 
    cout << "\n from B ";
    bb_father[ 1 ] ->calc(); 
    cout <<"\n "; 
    cout <<"\n "; 
 
    delete  bb_father[ 0 ];
    delete  bb_father[ 1 ];
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.09.2012, 00:13     Есть ли элемент который возвращает инфу на какой элемент иерархии #11
MrCold, И где тут инфа о типе?)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.09.2012, 09:02     Есть ли элемент который возвращает инфу на какой элемент иерархии #12
Цитата Сообщение от Leeto Посмотреть сообщение
так вот... как мне вернуть инфу на какого ребенка сейчас отцовский поитер направлен
Подозреваю, что дело всё таки в ошибочной архитектуре и/или скудном интерфейсе базового класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2012, 09:25     Есть ли элемент который возвращает инфу на какой элемент иерархии
Еще ссылки по теме:

Написать программу:функция что возвращает элемент массива,и удаляет этот элемент з массива C++
Функция изымает элемент из стека и возвращает его значение C++
C++ Элемент-функция length() возвращает кол-во символов

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
02.09.2012, 09:25     Есть ли элемент который возвращает инфу на какой элемент иерархии #13
в MFC это реализовано при помощи виртуальной функции GetRuntimeClass
которая возвращает структуру, в коей написано имя класса, размер, кто родитель и т.д
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
http://www.firststeps.ru/mfc/steps/help/r.php?638
Yandex
Объявления
02.09.2012, 09:25     Есть ли элемент который возвращает инфу на какой элемент иерархии
Ответ Создать тему
Опции темы

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