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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
#1

ООП + полиморфизм = wtf? - C++

27.08.2011, 19:49. Просмотров 1860. Ответов 40
Метки нет (Все метки)

Есть:
Класс A - отец
Класс Б - дочерний
Класс Ц - дочерный, наследуеться от А(сестра Б)

Есть массив типа А, с названием Mass.
Он хранит в себе объекты классов Б и Ц.

в классе Б есть функция F().
в классе Ц есть функция F() (отличающаяся функционалом).

Внамание! Вопрос:
как провернуть такую часть кода - Mass[0..100].F();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 19:49     ООП + полиморфизм = wtf?
Посмотрите здесь:

ООП. Полиморфизм - C++
Мальчики, учусь на МехМате. Для сдачи зачёта по ООП необходимо написать последнюю программу: Задание: полиморфизм Указание: во всех...

ООП Полиморфизм Наследование - C++
У меня есть базовый класс и 2 производных от него класса... Как сделать, чтобы в программе я мог сделать такое обьявление: Force fc;...

Полиморфизм инкапсуляция и наследование(ООП) - C++
Не как не могу понять зачем нужен Полиморфизм и инкапсуляция и их определение может вы подскажите, наследования я знаю

Подкиньте практику по ООП + полиморфизм + шаблоны пожалуйста. - C++
Здравствуйте форумчане. Хотел бы попросить подбросить практику по таким темам: ООП - полифорфизм + Тэмплэты. Ну и если можно, что нибудь...

Очередное WTF ))) - C++
Вот до чего меня жизнь довела: имеем файл file.txt который содержит просто строку "Hello,World!" (с ковычками). Далее пишем такой код: ...

Расширение языка С. WTF? - C++
Hi, All! Решил на выходных заняться учебой, сессия скоро. На эти выходные наметил себе план работ - скачать задания:) Вот сижу читаю...

Спецификация файла. WTF? - C++
Здравствуйте. Что такое спецификация файла (в контексте данной задачи)? В Google ничего понятного не нашел. Заранее спасибо.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:22  [ТС]     ООП + полиморфизм = wtf? #21
C++
1
2
3
4
abstract class D3D_UI
{
      virtual void setStatus(LPVOID Object,int newstatus) = 0;
};


this declaration has no storage class or type specifier c:\users\baizor\desktop\robotino v3 directx 9 - копия\robotino v2 directx 9\direct3d_ui.h 1 1 Robotino V2 Directx 9



позабыл я как это делаеться?
Сыроежка
Заблокирован
27.08.2011, 20:25     ООП + полиморфизм = wtf? #22
Цитата Сообщение от BAIZOR Посмотреть сообщение
Спасибо, мне предложили этот вариант, и я просто продемонтрировал что он не рабочий.

Я уже понял все, только одного не знаю - как сделать класс Абстрактным, я давненько это делал... в нем не может быть не абстрактных функций и еще что-то ?

Вы можете в своем базовом классе функцию setStatus объявить следующим образом

C++
1
virtual void setStatus(LPVOID Object,int newstatus) = 0;
Это между прочим не мешает вам опеределить в базовом классе тело самой функции, если есть такая необходимость, то есть если в производных классах в этой функции используется вызов setStatus из их кода.

Добавлено через 1 минуту
Цитата Сообщение от BAIZOR Посмотреть сообщение
C++
1
2
3
4
abstract class D3D_UI
{
      virtual void setStatus(LPVOID Object,int newstatus) = 0;
};


this declaration has no storage class or type specifier c:\users\baizor\desktop\robotino v3 directx 9 - копия\robotino v2 directx 9\direct3d_ui.h 1 1 Robotino V2 Directx 9



позабыл я как это делаеться?
Больше ничего добавлять не надо. Достаточно одну функцию объявить чисто виртуальной. Проще всего это сделать для деструктора класса.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:26  [ТС]     ООП + полиморфизм = wtf? #23
Цитата Сообщение от Сыроежка Посмотреть сообщение
Это между прочим не мешает вам опеределить в базовом классе тело самой функции, если есть такая необходимость, то есть если в производных классах в этой функции используется вызов setStatus из их кода.
хм... мудро, учту

Добавлено через 42 секунды
Цитата Сообщение от Сыроежка Посмотреть сообщение
Больше ничего добавлять не надо. Достаточно одну функцию объявить чисто виртуальной. Проще всего это сделать для деструктора класса.
да, но ошибка, вон, я дописал под кодом
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 20:26     ООП + полиморфизм = wtf? #24
Цитата Сообщение от BAIZOR Посмотреть сообщение
позабыл я как это делаеться?
Слово abstract зачем?
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:29  [ТС]     ООП + полиморфизм = wtf? #25
Цитата Сообщение от Сыроежка Посмотреть сообщение
this declaration has no storage class or type specifier

=(....

Добавлено через 52 секунды
Цитата Сообщение от grizlik78 Посмотреть сообщение
Слово abstract зачем?
убрал - 'D3D_UI' : cannot instantiate abstract class

Добавлено через 37 секунд
опять же, вопрос, разве ничего больше не надо для абстрактного класса?

Добавлено через 29 секунд
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
class D3D_UI
{
protected:
    UINT                        status;
    LPDIRECT3DTEXTURE9          sleep,activ,down;
    LPDIRECT3DVERTEXBUFFER9     g_pVB;
    bool                        enable;
    time_t                      timer;
    bool                        (*function)(Robotino3D*);
 
public:
    D3DRectangle                Rectangle;
    bool                        Down;
 
    D3D_UI(){status=0;}
    D3D_UI(LPDIRECT3DDEVICE9 &pd3dDevice,
                                        LPCWSTR sleep_,
                                        LPCWSTR activ_,
                                        LPCWSTR down_, 
                                        float x1, 
                                        float y1, 
                                        float z1, 
                                        float x2,
                                        float y2,
                                        float z2,
                                        float z3,
                                        float z4)
    {
        UpdateObject(pd3dDevice, sleep_, activ_, down_, x1, y1, z1, x2, y2, z2, z3, z4);
    }
 
    static void TransformCoords(LPDIRECT3DDEVICE9 &pd3dDevice, 
                                D3DCamera &Camera, 
                                D3DXMATRIX &Transform, 
                                D3DXVECTOR3 &pos, 
                                D3DXVECTOR3 &dir, 
                                int x, 
                                int y)
    {
        float                       px,
                                    py;
 
        D3DVIEWPORT9                ViewPort;
        D3DXMATRIX                  MatrixProjection;
 
        pd3dDevice->GetViewport     (&ViewPort);
        pd3dDevice->GetTransform    (D3DTS_PROJECTION, &MatrixProjection);
 
        px      =   ((( 2.0f*(float)x) / (float)ViewPort.Width)  - 1.0f) / MatrixProjection._11;
        py      =   (((-2.0f*(float)y) / (float)ViewPort.Height) + 1.0f) / MatrixProjection._22;
 
        pos.x   =   Camera.CamPos.x; 
        pos.y   =   Camera.CamPos.y; 
        pos.z   =   Camera.CamPos.z;
  
        dir.x   =   px; 
        dir.y   =   py; 
        dir.z   =   1.0;
 
        D3DXVec3TransformCoord( 
          &pos, 
          &pos, 
          &Transform 
        ); 
  
        D3DXVec3TransformNormal( 
          &dir, 
          &dir, 
          &Transform 
        );
    }
    virtual void setStatus(LPVOID Object,int newstatus) = 0;
 
    bool Select(D3DXVECTOR3 &pos, D3DXVECTOR3 &dir)
    {
        float               Distance    =   2000.0f;
 
        CUSTOMVERTEX        *buffer     =   Rectangle.init();
 
        bool                Result_1    =   false,
                            Result_2    =   false;
 
        Result_1    =    D3DXIntersectTri   (   &D3DXVECTOR3(buffer[0].x, buffer[0].y, buffer[0].z), 
                                                &D3DXVECTOR3(buffer[1].x, buffer[1].y, buffer[1].z),
                                                &D3DXVECTOR3(buffer[2].x, buffer[2].y, buffer[2].z),
                                                &pos,
                                                &dir,
                                                0,
                                                0,
                                                &Distance);
 
        Result_2    =    D3DXIntersectTri   (   &D3DXVECTOR3(buffer[3].x, buffer[3].y, buffer[3].z), 
                                                &D3DXVECTOR3(buffer[4].x, buffer[4].y, buffer[4].z),
                                                &D3DXVECTOR3(buffer[5].x, buffer[5].y, buffer[5].z),
                                                &pos,
                                                &dir,
                                                0,
                                                0,
                                                &Distance);
 
        return Result_1 || Result_2;
    }
    void SetTimer(UINT t_size)
    {
        timer   =   clock() + t_size;
    }
    void UpdateObject(LPDIRECT3DDEVICE9 &pd3dDevice, 
                                        LPCWSTR sleep_,
                                        LPCWSTR activ_,
                                        LPCWSTR down_, 
                                        float x1, 
                                        float y1, 
                                        float z1, 
                                        float x2,
                                        float y2,
                                        float z2,
                                        float z3,
                                        float z4)
    {
        Down        = false;
        status      = 0;
        g_pVB       =   NULL;
        sleep       =   NULL;
        activ       =   NULL;
        down        =   NULL;
        D3DXCreateTextureFromFile(pd3dDevice,sleep_, &sleep);
        D3DXCreateTextureFromFile(pd3dDevice,activ_, &activ);
        D3DXCreateTextureFromFile(pd3dDevice,down_ , &down);
        Rectangle   = *new D3DRectangle(x1, y1, z1, x2, y2, z2, z3, z4);
    }
 
    LPDIRECT3DTEXTURE9 getTexture()
    {
        if(status == 0) return sleep;
        if(status == 1) return activ;
        if(status == 2) return down;
    }
    virtual bool Render(LPDIRECT3DDEVICE9 &pd3dDevice)
    {
        pd3dDevice->SetFVF              ( D3DFVF_CUSTOMVERTEX );
        pd3dDevice->SetStreamSource     ( 0, g_pVB, 0, sizeof(CUSTOMVERTEX));
 
        if(FAILED(pd3dDevice->SetTexture    (0, getTexture())))             return false;
        if(FAILED(pd3dDevice->DrawPrimitive (D3DPT_TRIANGLELIST, 0, 2)))    return false;
 
        return true;
    }
};
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 20:31     ООП + полиморфизм = wtf? #26
Цитата Сообщение от BAIZOR Посмотреть сообщение
убрал - 'D3D_UI' : cannot instantiate abstract class
Ну да. Потому что нельзя создать вектор с элементами этого типа. Можно и нужно создать вектор указателей на этот класс. Правда удалять элементы тогда вручную придётся.

Добавлено через 2 минуты
Кстати, возможно этот класс и не должен быть абстрактным. Это было просто предположение. Но потомков в один массив собрать можно только с помощью указателей.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:33  [ТС]     ООП + полиморфизм = wtf? #27
Цитата Сообщение от grizlik78 Посмотреть сообщение
Потому что нельзя создать вектор с элементами этого типа.
Вот оно! Спасибо =)

Цитата Сообщение от grizlik78 Посмотреть сообщение
Правда удалять элементы тогда вручную придётся
А вызов деструктора из детей пойдет?
Сыроежка
Заблокирован
27.08.2011, 20:33     ООП + полиморфизм = wtf? #28
Цитата Сообщение от BAIZOR Посмотреть сообщение
=(....

Добавлено через 52 секунды


убрал - 'D3D_UI' : cannot instantiate abstract class

Добавлено через 37 секунд
опять же, вопрос, разве ничего больше не надо для абстрактного класса?

Добавлено через 29 секунд
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
class D3D_UI
{
protected:
    UINT                        status;
    LPDIRECT3DTEXTURE9          sleep,activ,down;
    LPDIRECT3DVERTEXBUFFER9     g_pVB;
    bool                        enable;
    time_t                      timer;
    bool                        (*function)(Robotino3D*);
 
public:
    D3DRectangle                Rectangle;
    bool                        Down;
 
    D3D_UI(){status=0;}
    D3D_UI(LPDIRECT3DDEVICE9 &pd3dDevice,
                                        LPCWSTR sleep_,
                                        LPCWSTR activ_,
                                        LPCWSTR down_, 
                                        float x1, 
                                        float y1, 
                                        float z1, 
                                        float x2,
                                        float y2,
                                        float z2,
                                        float z3,
                                        float z4)
    {
        UpdateObject(pd3dDevice, sleep_, activ_, down_, x1, y1, z1, x2, y2, z2, z3, z4);
    }
 
    static void TransformCoords(LPDIRECT3DDEVICE9 &pd3dDevice, 
                                D3DCamera &Camera, 
                                D3DXMATRIX &Transform, 
                                D3DXVECTOR3 &pos, 
                                D3DXVECTOR3 &dir, 
                                int x, 
                                int y)
    {
        float                       px,
                                    py;
 
        D3DVIEWPORT9                ViewPort;
        D3DXMATRIX                  MatrixProjection;
 
        pd3dDevice->GetViewport     (&ViewPort);
        pd3dDevice->GetTransform    (D3DTS_PROJECTION, &MatrixProjection);
 
        px      =   ((( 2.0f*(float)x) / (float)ViewPort.Width)  - 1.0f) / MatrixProjection._11;
        py      =   (((-2.0f*(float)y) / (float)ViewPort.Height) + 1.0f) / MatrixProjection._22;
 
        pos.x   =   Camera.CamPos.x; 
        pos.y   =   Camera.CamPos.y; 
        pos.z   =   Camera.CamPos.z;
  
        dir.x   =   px; 
        dir.y   =   py; 
        dir.z   =   1.0;
 
        D3DXVec3TransformCoord( 
          &pos, 
          &pos, 
          &Transform 
        ); 
  
        D3DXVec3TransformNormal( 
          &dir, 
          &dir, 
          &Transform 
        );
    }
    virtual void setStatus(LPVOID Object,int newstatus) = 0;
 
    bool Select(D3DXVECTOR3 &pos, D3DXVECTOR3 &dir)
    {
        float               Distance    =   2000.0f;
 
        CUSTOMVERTEX        *buffer     =   Rectangle.init();
 
        bool                Result_1    =   false,
                            Result_2    =   false;
 
        Result_1    =    D3DXIntersectTri   (   &D3DXVECTOR3(buffer[0].x, buffer[0].y, buffer[0].z), 
                                                &D3DXVECTOR3(buffer[1].x, buffer[1].y, buffer[1].z),
                                                &D3DXVECTOR3(buffer[2].x, buffer[2].y, buffer[2].z),
                                                &pos,
                                                &dir,
                                                0,
                                                0,
                                                &Distance);
 
        Result_2    =    D3DXIntersectTri   (   &D3DXVECTOR3(buffer[3].x, buffer[3].y, buffer[3].z), 
                                                &D3DXVECTOR3(buffer[4].x, buffer[4].y, buffer[4].z),
                                                &D3DXVECTOR3(buffer[5].x, buffer[5].y, buffer[5].z),
                                                &pos,
                                                &dir,
                                                0,
                                                0,
                                                &Distance);
 
        return Result_1 || Result_2;
    }
    void SetTimer(UINT t_size)
    {
        timer   =   clock() + t_size;
    }
    void UpdateObject(LPDIRECT3DDEVICE9 &pd3dDevice, 
                                        LPCWSTR sleep_,
                                        LPCWSTR activ_,
                                        LPCWSTR down_, 
                                        float x1, 
                                        float y1, 
                                        float z1, 
                                        float x2,
                                        float y2,
                                        float z2,
                                        float z3,
                                        float z4)
    {
        Down        = false;
        status      = 0;
        g_pVB       =   NULL;
        sleep       =   NULL;
        activ       =   NULL;
        down        =   NULL;
        D3DXCreateTextureFromFile(pd3dDevice,sleep_, &sleep);
        D3DXCreateTextureFromFile(pd3dDevice,activ_, &activ);
        D3DXCreateTextureFromFile(pd3dDevice,down_ , &down);
        Rectangle   = *new D3DRectangle(x1, y1, z1, x2, y2, z2, z3, z4);
    }
 
    LPDIRECT3DTEXTURE9 getTexture()
    {
        if(status == 0) return sleep;
        if(status == 1) return activ;
        if(status == 2) return down;
    }
    virtual bool Render(LPDIRECT3DDEVICE9 &pd3dDevice)
    {
        pd3dDevice->SetFVF              ( D3DFVF_CUSTOMVERTEX );
        pd3dDevice->SetStreamSource     ( 0, g_pVB, 0, sizeof(CUSTOMVERTEX));
 
        if(FAILED(pd3dDevice->SetTexture    (0, getTexture())))             return false;
        if(FAILED(pd3dDevice->DrawPrimitive (D3DPT_TRIANGLELIST, 0, 2)))    return false;
 
        return true;
    }
};
Это означает, что где-то в коде main вы пытаетесь создать объект базового класса. Можно использовать лишь указатель на базовый класс или ссылку.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 20:36     ООП + полиморфизм = wtf? #29
Цитата Сообщение от BAIZOR Посмотреть сообщение
А вызов деструктора из детей пойдет?
Пойдёт из детей, только деструктор должен быть объявлен в базовом классе как виртуальный. Для полиморфных классов это обязательно, кстати.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 20:47  [ТС]     ООП + полиморфизм = wtf? #30
Цитата Сообщение от grizlik78 Посмотреть сообщение
Пойдёт из детей, только деструктор должен быть объявлен в базовом классе как виртуальный. Для полиморфных классов это обязательно, кстати.
Окей, спасибо большое!)
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 20:50     ООП + полиморфизм = wtf? #31
Цитата Сообщение от BAIZOR Посмотреть сообщение
А вызов деструктора из детей пойдет?
Я вот только сейчас понял, что эту фразу можно прочитать несколькими способами
Я имел в виду, что при удалении объекта по базовому указателю с помощью delete, будет вызван деструктор наследника, при условии что деструктор виртуальный. Надеюсь в вопросе было это
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 21:33  [ТС]     ООП + полиморфизм = wtf? #32
Цитата Сообщение от grizlik78 Посмотреть сообщение
Я имел в виду, что при удалении объекта по базовому указателю с помощью delete, будет вызван деструктор наследника, при условии что деструктор виртуальный. Надеюсь в вопросе было это
да да) я просто стараюсь говорить проще, а то достало когда люди меня не понимают

Добавлено через 19 минут
Господа... а у меня программа падает на вызове такоей же функции, только она с названием Render();

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
main()
{
        vector<D3D_UI*>             UI;
        UI.push_back( &D3DXButton(...) );
        UI[0]->Render(); [COLOR="Red"]//вылетело - зависло[/COLOR]
}
 
class D3D_UI
{
public:
    virtual bool Render(LPDIRECT3DDEVICE9 &pd3dDevice) = 0;
};
 
class D3DXButton : public D3D_UI
{
public:
    bool Render(LPDIRECT3DDEVICE9 &pd3dDevice)
    {
              ....
        }
};
Сыроежка
Заблокирован
27.08.2011, 21:35     ООП + полиморфизм = wtf? #33
Цитата Сообщение от BAIZOR Посмотреть сообщение
да да) я просто стараюсь говорить проще, а то достало когда люди меня не понимают

Добавлено через 19 минут
Господа... а у меня программа падает на вызове такоей же функции, только она с названием Render();

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
main()
{
        vector<D3D_UI*>             UI;
        UI.push_back( &D3DXButton(...) );
        UI[0]->Render(); [COLOR="Red"]//вылетело - зависло[/COLOR]
}
 
class D3D_UI
{
public:
    virtual bool Render(LPDIRECT3DDEVICE9 &pd3dDevice) = 0;
};
 
class D3DXButton : public D3D_UI
{
public:
    bool Render(LPDIRECT3DDEVICE9 &pd3dDevice)
    {
              ....
        }
};
В режиме отладки пройдитесь по предложениям вашей функции и посмотрите, где она виснет!
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 21:38     ООП + полиморфизм = wtf? #34
Цитата Сообщение от BAIZOR Посмотреть сообщение
UI.push_back( &D3DXButton(...) );
В вектор помещается адрес временного объекта, который тут же уничтожается.

Добавлено через 1 минуту
Правда сомнения у меня, что такое может компилироваться

Добавлено через 1 минуту
Но, к сожалению, компилируется.
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 21:42  [ТС]     ООП + полиморфизм = wtf? #35
Цитата Сообщение от Сыроежка Посмотреть сообщение
В режиме отладки пройдитесь по предложениям вашей функции и посмотрите, где она виснет!
"Виснет" именно на вызове, не в ней, а на вызове.


Цитата Сообщение от grizlik78 Посмотреть сообщение
В вектор помещается адрес временного объекта, который тут же уничтожается.
я так и думал... но как же это обойти?

может как то так

C++
1
UI.push_back( &*&D3DXButton(...) );
если только скомпилируеться.. =)
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 21:43     ООП + полиморфизм = wtf? #36
new/delete
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 21:44  [ТС]     ООП + полиморфизм = wtf? #37
Цитата Сообщение от BAIZOR Посмотреть сообщение
Код C++
1
UI.push_back( &*&D3DXButton(...) );
если только скомпилируеться.. =)
скомпилировалось.. но эффект тот же

Добавлено через 20 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
new/delete
сейчас попробую...
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 21:45     ООП + полиморфизм = wtf? #38
Избавиться от необходимости delete можно с помощью "умных" указателей. А вот от new избавиться не удастся. Не переменные же отдельные создавать
BAIZOR
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 68
27.08.2011, 21:46  [ТС]     ООП + полиморфизм = wtf? #39
C++
1
UI.push_back( new D3DXButton (...) );
Ура!) Выручили внатуре!! =)

Добавлено через 1 минуту
поидеи вызов UI.clear(); должен вызвать деструкторы всех деток и после почистить их память?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 21:49     ООП + полиморфизм = wtf?
Еще ссылки по теме:

map assigment of read only data member или WTF? - C++
задача:из acm.timus.ru 1100. Таблица результатов Ограничение времени: 1.0 секунды Ограничение памяти: 16 МБ Старое программное...

WTF не работает простой код на Visual studio 2008(баг?) - C++
Взял код из википедии. ...

Полиморфизм - C++
Прочитал в Википедии что такое полиморфизм: Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». ...

Полиморфизм - C++
Вот сделал прогу а ее надо было сделать полиморфизмом - кому несложно переделайте #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Полиморфизм - C++
Имеется такая задача Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на...


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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.08.2011, 21:49     ООП + полиморфизм = wtf? #40
Цитата Сообщение от BAIZOR Посмотреть сообщение
поидеи вызов UI.clear(); должен вызвать деструкторы всех деток и после почистить их память?
Нет, он просто удалит указатели, не разрушая сами объекты. Умные указатели при разрушении сами удалят объекты (только std::auto_ptr здесь никак не подойдёт). А с простыми указателями надо в цикле удалять все объекты ручным вызовом delete.
Yandex
Объявления
27.08.2011, 21:49     ООП + полиморфизм = wtf?
Ответ Создать тему
Опции темы

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