|
|
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Задача - сабж. Как в программе созадть двумерный массив из элементов (столбцов) разных типов. Количество стоблцов и строк аткже определяется во время выполнения программы. Помогите пжл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 10:32 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
LenieЗадача - сабж. Как в программе созадть двумерный массив из элементов (столбцов) разных типов. Количество стоблцов и строк аткже определяется во время выполнения программы. Помогите пжл. сделать класс CСell описывающие содержимое ячейки, потом с помощью stl::array загнать его в массив я бы сделал так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 10:37 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
LenieЗадача - сабж. Как в программе созадть двумерный массив из элементов (столбцов) разных типов. Количество стоблцов и строк аткже определяется во время выполнения программы. Помогите пжл. Отнаследовать классы (типы) столбцов от интерфейса. Создать массив указателей на интерфейсы. За счет полиморфизма они будут вести себя так как надо. Саттер также рекомендует использовать массив из shared_ptr, которые будут хранить указатели на интерфейсы, т.к. стандарт с++ не декларирует того, что размеры указателей для разных типов будут одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 10:42 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Cerebrum сделать класс CСell описывающие содержимое ячейки, потом с помощью stl::array загнать его в массив я бы сделал так спасибо условие - писать на чистом visual c++ без использования библиотек есть мысль создать массив из типов variant... щас почитаю про этот тип... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 11:02 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
спасибо Akh Отнаследовать классы (типы) столбцов от интерфейса. Создать массив указателей на интерфейсы. За счет полиморфизма они будут вести себя так как надо. мне кажется это замудрено, или я ошибаюсь (опыта программирования у меня маловато) Саттер также рекомендует использовать массив из shared_ptr извиняюсь, кто такой Саттер? , которые будут хранить указатели на интерфейсы, т.к. стандарт с++ не декларирует того, что размеры указателей для разных типов будут одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 11:05 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Typedef struct { int *iArr; double *dArr; } stArr, *pstArr; Class TMyArr { protected: int iN, iM; public: pstArr Arrays; TMyArr ( int n, int m); ~TMyArr(); }; TMyArr::TMyArr( int n, int m) { iN = n; iM = m; Arrays = new pstArr [n]; for( int i=0; i< n; i++) { Arrays->iArr = new int [m]; Arrays->dArr = new double [m]; } } TMyArr::TMyArr( ) { TMyArr( 5,6); } TMyArr::~TMyArr( ) { for( int i=0; i< iN; i++) { delete [] Arrays->iArr ; delete [] Arrays->dArr ; } delete [] Arrays; } // класс можно не использовать //если надо писать на С а не на С++ то вместо new && delete используьте malloc && free // идея должна быть понятна //у меня возможны ошибки в написании не проверял просто идея // определяете структуру в ней указатели на ваши элементы // динамически получаете массив этих структур (строки) и в цикле в каждой структуре жинамически получаете массивы элементов (столбцы) // когда стали не нужны, то освобождаете память // обратный порядок в цикле освобождаете массивы элементов а эатем освобождаете массив структур // // класс написал длч понятности. // расписывать дальше его не буду //сами справитесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 11:09 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Lenieспасибо [quot Akh] Отнаследовать классы (типы) столбцов от интерфейса. Создать массив указателей на интерфейсы. За счет полиморфизма они будут вести себя так как надо. мне кажется это замудрено, или я ошибаюсь (опыта программирования у меня маловато) Код: plaintext 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. Если, что не понятно, не стесняйся Саттер также рекомендует использовать массив из shared_ptr извиняюсь, кто такой Саттер? Буржуйский знаток С++, книги напишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 11:32 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Основной класс обозвали ICell а обращаетесь к нему Cell. На этапе компиляции ошибки = скорее всег описки или невнимательность. А мой пример "какой вопрос такой ответ" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 11:59 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
//Интерфейс class ICell { public: virtual ~ICell() {}; //virtual ~Cell() {}; virtual void printCell() = 0; }; //Реализация текстового class CellText : public ICell { public: void setText(char const *text) {/*...*/}; void printCell() {/**/}; }; //Реализация с картинкой class CellImage : public ICell { public: void setImage(unsigned char const *bufImage) {/*...*/}; void printCell() {/**/}; }; //Сам массив ICell *(cells[2]); //Cell *(cells[2]); //Функция использующая массив с объектами разного типа, но от одного интерфейса void printCells() { for (int i=0 ; i<2 ; ++i) cells ->printCell(); //cells->printCell(); }; //Вся работа int main() { //Создаем объекты CellText *text = new CellText();; CellImage *image = new CellImage(); text->setText("bla-bla"); //text->setTex("bla-bla"); image->setImage("image"); //image->setImage(/*image*/); //Заностим в массив cells[0]=text; cells[1]=image; //Выводим на печать используя полиморфизм printCells(); //Убиваем объекты delete cells[0]; delete cells[1]; //Усе return 0; } // компиляция прошла вникать не хочу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 12:12 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
VladimirPОсновной класс обозвали ICell а обращаетесь к нему Cell. На этапе компиляции ошибки = скорее всег описки или невнимательность. А мой пример "какой вопрос такой ответ" Опечатки, конечно. Показал смысл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 12:26 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
AkhСаттер также рекомендует использовать массив из shared_ptr, которые будут хранить указатели на интерфейсы, т.к. стандарт с++ не декларирует того, что размеры указателей для разных типов будут одинаковы.э? Вроде указатели на один и тот же интерфейс – одинаковые, во всяком случае, в вс можно явно указать тип наследования класса, хотя он должен сам определить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 13:12 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, ценю помощь и получение полезной инф-ции. Вот реализация: union VALUE { unsigned ui_val; int i_val; unsigned short us_val; short s_val; unsigned char uc_val; char c_val; float f_val; double d_val; __int64 i64_val; char *str_val; }; VALUE **ar = new VALUE* [row_count]; for (int i = 0; i < row_count; i++) ar = new VALUE [column_count]; ar [10][20].str_val = (char*) some_variable; // пример использования... for (i = 0; i < row_count; i++) delete [] ar ; delete [] ar; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 15:55 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
LenieВсем спасибо, ценю помощь и получение полезной инф-ции. Вот реализация: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Интересный финт ушами. А как ты узнаешь, что за тип данных у тебя в ячейке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 16:39 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Akh Интересный финт ушами. А как ты узнаешь, что за тип данных у тебя в ячейке? при заполнении массива я его буду знать виновата О:-), должна была сказать об этом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 17:21 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Если variant освоили, то можно посмотреть на профессиональную реализацию класса, который может содержать в себе значение любого типа (http://www.boost.org/doc/html/any.html). Пример использования: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 20:14 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковЕсли variant освоили, то можно посмотреть на профессиональную реализацию класса, который может содержать в себе значение любого типа (http://www.boost.org/doc/html/any.html). Пример использования: Код: plaintext 1. 2. 3. 4. 5. 6. 7. variant не освоила из-за альтернативного варианта с union, а за ответ - спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 21:20 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Lenievariant не освоила из-за альтернативного варианта с union, а за ответ - спасибо!А variant это по существу тот же самый union только с дополнительной обвязкой для удобства. В самом примитивном варианте будет примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 21:28 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2007, 22:04 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
blindedутгь еще внутрь структуры спрячь и изврат готов если вам чем-то не нравится код, говорите пжл по существу, чистый гон не принимается извините, но если бы я нормально знала язык, сюда бы не писала простые вещи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 10:14 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
Я говорю определение enum надо запихать внутрь struct. А не нравится одно - это стиль старого С, так писали 30 лет назад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 10:38 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
blindedЯ говорю определение enum надо запихать внутрь struct. А не нравится одно - это стиль старого С, так писали 30 лет назад понятно, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 10:54 |
|
||
|
Динамическое создание массива из элементов разных типов
|
|||
|---|---|---|---|
|
#18+
blindedЯ говорю определение enum надо запихать внутрь struct. А не нравится одно - это стиль старого С, так писали 30 лет назадЗато он очень прост и идеально подходит для объяснения принципов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2007, 17:18 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34543015&tid=2028816]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
142ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 427ms |

| 0 / 0 |
