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

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

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

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

01.09.2012, 20:28. Просмотров 593. Ответов 12
Метки нет (Все метки)

... Поинтор сейчас поинтит ???


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

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

Какой элемент останется в кольце последним, если начать по очереди удалять из списка каждый n элемент - C++
Создать структуру с именем Subject с полями: фамилия, имя. Сформиро-вать замкнутое кольцо (односвязный список, у которого последний...

Найти нулевой(ые) элемент(ы) в матрице, вывести на пересечение какой строки и столбца располагается(ются) этот(эти) элемент(ы) - C++
Ребят, программа нужна срочно, мне на неё нужно много потратить времени, помогите. Язык Си.

Функция .end() возвращает не тот элемент - C++
#include <iostream> #include <list> #include <fstream> #include <iterator> #include <fstream> void printVec(std::list<char>...

Функция возвращает весь вектор или элемент? - C++
Например есть такая функция vector<int> huh(...,...); Функция возвращает весь вектор или элемент? А есть тут раздел,...

Элемент-функция length() возвращает количество символов - C++
Здравствуйте. void GradeBook::setCourseName(string name) { if (name.length() <= 25) // если не более 25 символов ...

Функция изымает элемент из стека и возвращает его значение - C++
Нужно реализовать стек , в котором вместо двух функций top i pop используется только одна функция pop , которая делает эти два действия...

Создать рекурсивную функцию, которая возвращает наименьший элемент массива - C++
Задача: Напишите рекурсивную функцию, которая принимает массив и размер массива как аргументы и возвращает наименьший элемент массива. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
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
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 23:00     Есть ли элемент который возвращает инфу на какой элемент иерархии #4
Ага. Такую функцию.

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



а я думал у тебя / вас мысля пришла... поэтому код запросил(и)
MrCold
852 / 750 / 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
02.09.2012, 00:13     Есть ли элемент который возвращает инфу на какой элемент иерархии #11
MrCold, И где тут инфа о типе?)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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++
Есть ли в данном массиве элемент, равный заданному числу? Если есть, то вывести номер одного из них. Напишите программу пожалуйста,очень...

Создать рекурсивную функцию recursiveMinimum, которая возвращает наименьший элемент массива - C++
Помогите решить Напишите рекурсивную функцию recursiveMinimum, которая принимает массив и размер массива как аргументы и возвращает...

Написать функцию getElem, которая возвращает ссылку на i - тый элемент массива - C++
Задача: Первое решение учитильница не принила. Сказала что все не правильно. Я эту задачу перерешал в 4 варантах. Все они очень...

Написать программу, содержащую функцию, которая возвращает минимальный элемент переданного ей массива - C++
3. Написать программу, содержащую функцию, которая возвращает минимальный элемент переданного ей массива, если все элементы массива...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
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     Есть ли элемент который возвращает инфу на какой элемент иерархии
Ответ Создать тему
Опции темы

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