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

Преобразование классов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу, которая определяет, какая часть отрезка окрашен http://www.cyberforum.ru/cpp-beginners/thread1156003.html
Автомат проводит кистью по отрезку от точки A до точки B, а потом от точки C до точки D. Написать программу, которая определяет, какая часть отрезка окрашена.
C++ Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз http://www.cyberforum.ru/attachments/243234d1363129946 не могу понять что у меня не правильно, помогите пожалуйста. #include <stdio.h> #include <conio.h> #include <iostream> int main() { setlocale(LC_ALL, "Russian"); int n, k, j, i; int *a= new int; http://www.cyberforum.ru/cpp-beginners/thread1156002.html
C++ Разделить старшие и младшие биты в переменной
Объясните дураку работу с битовыми операциями... Есть у меня массив, где первый элемент это 32 младших бита, а второй - 32 старших unsigned int sp = {0x11111111, 0x22222222}; Теперь мне это нужно записать в переменную, делаю вот так long long var = (sp << 32) | (sp << 32); Далее провожу операции над этой переменной, а затем мне заново нужно разделить старшие и младшие биты. Пытаюсь сделать...
Переписать программу с паскаля на Си++ C++
Нужно переписать программу с паскаля на си ++. а то у меня не получается... uses crt; label l1,l2,l3,l4,l5; type osa=record x:integer; Y:integer; life:integer; baby:integer; xp:integer; Yp:integer; end;
C++ Создать динамический список, поменять местами последний и первый элементы списка, предпоследний и второй и т.д. http://www.cyberforum.ru/cpp-beginners/thread1155950.html
Всем привет. Подкиньте идею, весь мозг сломал. Задание:Создать динамический список. Поменять местами последний и первый элементы списка, предпоследний и второй и т. д.. Список создал, даже местами поменял, но поменял только заново инициализированный(созданный из массива) список, а как поменять местами заранее созданный список (добавленные, удаленные элементы) никак не соображу. Понимаю, что нужно...
C++ Удалить из строки все пробелы, расположенные перед знаком препинания Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не отделяются. Удалить из строки все пробелы, расположенные перед знаком препинания. подробнее

Показать сообщение отдельно
locm
1979 / 734 / 70
Регистрация: 28.10.2011
Сообщений: 2,134
Записей в блоге: 2

Преобразование классов - C++

24.04.2014, 16:06. Просмотров 790. Ответов 11
Метки (Все метки)

Есть код для MS VS C++, который переписываю на другой ЯП и не совсем понимаю как преобразовываются объекты.
Интересующие части кода. Классы.
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
class IACTIVEMODEL
 { public:
      virtual VOID initialize (ICOMPONENT *cpt) = 0;
      virtual ISPICEMODEL *getspicemodel (CHAR *primitive) = 0;
      virtual IDSIMMODEL  *getdsimmodel (CHAR *primitive) = 0;
      virtual VOID plot (ACTIVESTATE state) = 0;
      virtual VOID animate (INT element, ACTIVEDATA *newstate) = 0;
      virtual BOOL actuate (WORD key, INT x, INT y, DWORD flags) = 0;
 };
 
class IDSIMMODEL
 { public:
      virtual INT  isdigital (CHAR *pinname) = 0;
      virtual VOID setup (IINSTANCE *instance, IDSIMCKT *dsim) = 0;
      virtual VOID runctrl (RUNMODES mode) = 0;
      virtual VOID actuate (REALTIME time, ACTIVESTATE newstate) = 0;
      virtual BOOL indicate (REALTIME time, ACTIVEDATA *newstate) = 0;
      virtual VOID simulate (ABSTIME time, DSIMMODES mode) = 0;
      virtual VOID callback (ABSTIME time, EVENTID eventid) = 0;
 };
 
class ISPICEMODEL
 { public:
      virtual INT  isanalog (CHAR *pinname) = 0;
      virtual VOID setup (IINSTANCE *, ISPICECKT *) = 0;
      virtual VOID runctrl (RUNMODES mode) = 0;
      virtual VOID actuate (REALTIME time, ACTIVESTATE newstate) = 0;
      virtual BOOL indicate (REALTIME time, ACTIVEDATA *newstate) = 0;
      virtual VOID dcload (REALTIME time, SPICEMODES mode, DOUBLE *oldrhs, DOUBLE *newrhs) = 0;
      virtual VOID acload (SPICEFREQ omega, DOUBLE *rhs, DOUBLE *irhs) = 0;
      virtual VOID trunc  (REALTIME time,  REALTIME *newtimestep) = 0;
      virtual VOID accept (REALTIME time, DOUBLE *rhs) = 0;
 };
 
class READOUTX : public IACTIVEMODEL, public IDSIMMODEL , public ISPICEMODEL
 {
    public:
      READOUTX (VOID);
      ~READOUTX (VOID);
      // Implementation of IACTIVEMODEL
      VOID initialize (ICOMPONENT *cpt);
      ISPICEMODEL *getspicemodel (CHAR *device);
      IDSIMMODEL *getdsimmodel (CHAR *device);
      VOID plot (ACTIVESTATE state);
      VOID animate (INT element, ACTIVEDATA *newstate);
      BOOL actuate (WORD key, INT x, INT y, DWORD flags);
 
      // IDSIMMODEL interface
            // Pin typing and connection functions:
      virtual INT isdigital (CHAR *pinname);
 
            // Common Functions:
      virtual VOID runctrl (RUNMODES mode);
      virtual VOID actuate (REALTIME time, ACTIVESTATE newstate);
      virtual BOOL indicate (REALTIME time, ACTIVEDATA *newstate);
            // Functions called by DSIM:
      VOID setup (IINSTANCE *, IDSIMCKT *dsim);
      VOID simulate (ABSTIME time, DSIMMODES mode);
      VOID callback (ABSTIME time, EVENTID eventid);
      ISIBLING *queryinterface (UINT iid);
 
      // ISPICEMODEL
      INT isanalog(CHAR *);
      VOID setup (IINSTANCE *, ISPICECKT *spice);
      VOID dcload(REALTIME, SPICEMODES, DOUBLE *, DOUBLE *);
      VOID acload(SPICEFREQ, DOUBLE *, DOUBLE *);
      VOID trunc(REALTIME, REALTIME *);
      VOID accept(REALTIME, DOUBLE *);
 
      VOID set_device(CHAR *s);
      VOID set_dprimitive(CHAR *s);     // primitive from DSIM
      VOID set_aprimitive(CHAR *s);     // primitive from SPICE
 
    private:
      ICOMPONENT *component;
      IINSTANCE *instance;
      IINSTANCE *ainstance;
      IDSIMCKT  *dsim;
      ISPICECKT *spice;
      IDEBUGPOPUP *idp;
      POINT textorg;
      HTEXTSTYLE textstyle;
      CHAR readout[10];
      CHAR device[32];
      CHAR dprimitive[32];
      CHAR aprimitive[32];
      CREATEPOPUPSTRUCT cps;
      DWORD i;
      IDSIMPIN  *pin_d0, *pin_d1, *pin_q;
      SPICENODE pin_plus, pin_minus;
      ACTIVEDATA adata;
 
      CHAR * EnumToString(INT element, ACTIVEDATA *data);
      CHAR * EnumToState(INT element, ACTIVEDATA *data);
      CHAR * EnumToRunCtrl(RUNMODES modes);
      CHAR * EnumToSmode(DSIMMODES smode);
      CHAR * DumpACTIVEDATA(INT element, ACTIVEDATA *data);
 
 };
Создание объекта.
C++
1
2
3
4
5
extern "C"  EXPORT IACTIVEMODEL *  createactivemodel (CHAR *device, ILICENCESERVER *ils)
 {
    READOUTX *model = new READOUTX();
    return (IACTIVEMODEL *) model;
 }
Преобразование объекта в другой.
C++
1
2
3
4
5
6
7
8
9
ISPICEMODEL *READOUTX::getspicemodel (CHAR *primitive)
{ 
    return (ISPICEMODEL *) this;
}
 
IDSIMMODEL *READOUTX::getdsimmodel (CHAR *primitive)
 {
    return (IDSIMMODEL *) this;
 }
В this находится тот указатель что был возвращен функцией createactivemodel(), но вот как он потом становится ISPICEMODEL или IDSIMMODEL?
Кстати, в createactivemodel() так же происходит преобразование в IACTIVEMODEL. Непонятно.

Как писал в начале, переписываю кода на другой ЯП и нужно знать как все это работает
Если просто передать this прога виснет или вылетает. Но если создать новый объект из ISPICEMODEL или IDSIMMODEL (в зависимости от функции), то все работает нормально. Как C++ преобразовывает один объект в другой?

Добавлено через 4 часа 50 минут
Никто не знает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru