Здравствуйте эксперты!!! Особенно Avl2k! :) Я задавал вопрос №1266 по поводу динамического выделения памяти под 2-х мерный массив! Это что же получается, что товарищь Архангельский обманывает народ, говоря то, что можно динамически выделить память 2-х мерный массив? В его книжке написано: "Можно создавать и многомерные массивы. Например, оператор: double *M = new double [100][100]; создает динаически и размещает в памяти двумерный массив. При размещении многомерных массивов надо иметь в виду, что первый размер можно задавать переменной, но остальные размеры задаются только константами. Например: double *M = new double [n][100];" Кстати, вот что говорит мне компилятор на запись double *M = new double [n][100]; : E2034 Cannot convert 'double ( *)[4]' to 'double *'. А не может ли быть дело в компиляторе? У меня
просто C++Builder4, а книжка про 5. С уважением, ILYA D.
Добрый день, ILYA D.! Я не ответил на первый вопрос так как уже немного поднадоело на этот вопрос отвечать. Что пишет Архангельский я не знаю. Но решения следующие:
Приложение: Ответ отправлен: 25.11.2003, 12:11 Отправитель: vitya Отвечает Avl2k
Здравствуйте, ILYA D.! Нет, Архангельский не обманывает народ. Под многомерный массив можно выделить память по new, если первая его размерность задана выражением, а остальные _константы_. Если же многомерный массив имеет _динамический_ :) (т.е. не константный) размер по всем измерениям, то под такой массив память по new выделить нельзя. Пример: double (*d)[7][8] = new double[n][7][8]; // ok аналогично typedef X[7][8]; X *d = new X[n]; // ok а вот так нельзя: new double[n][n][n]; // так нельзя А я понял, что в вопросе №1266 Вам надо было создать по new двумерный массив с переменными размерами по обоим измерениям, или это не так? С уважением, Avl2k.
Ответ отправлен: 25.11.2003, 12:55 Отправитель: Avl2k
Вопрос № 1268
Podskazhite plz gospoda Proffesionali kakim obrazom upakovat' saozdanie TREUGOL'NIKA ( ili KRUGA - nevazhno ) v klass "OBJECT"? Esli vse pisat' v main() - to nema problem: glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glEnd(); A kak v sluchae s klassom? chego pisat' v xxx.h? Ps. Ne so4tite za glupost', prosto tol'ko na4al isuchat' OOP. Zaranee blagodarstvuju.
Добрый день, ar43r! Если Вы хотите сделать классы-обертки для рисования фигур, то можно примерно так: struct sPoint3D { sPoint3D( GLfloat x, GLfloat y, GLfloat z ): m_x( x ), m_y( y ), m_z( z ) {} GLfloat m_x; GLfloat m_y; GLfloat m_z; }; class cGeomFigure { public: virtual void Draw() = 0; }; class cTriangle: public cGeomFigure { public: cTriangle( sPoint3D v1, sPoint3D v2, sPoint3D v3 ); virtual void Draw(); protected: sPoint3D m_v1, m_v2, m_v3; }; class cSphere: public cGeomFigure { public: cSphere( sPoint3D c, GLfloat r ); virtual void Draw(); }; void cTriangle::Draw() { glBegin(GL_TRIANGLES); glVertex3f(m_v1.m_x, m_v1.m_y, m_v1.m_z); glVertex3f(m_v2.m_x, m_v2.m_y, m_v2.m_z); glVertex3f(m_v3.m_x, m_v3.m_y, m_v3.m_z); glEnd(); } void cSphere::Draw() {
/* здесь рисование сферы */ } // использование void f() { cTriangle t1(sPoint3D(0, 1, 0), sPoint3D(-1,-1, 0), sPoint3D(1,-1, 0)); cSphere s1(sPoint3D(1, 2, 0), 3), s2(sPoint3D(0, 3, 4), 2); cGeomFigure* a[] = { &t1, &s1, &s2 }; for( int i = 0; i < 3; ++i ) a[i]->Draw(); } С уважением, Avl2k. Ответ отправлен: 25.11.2003, 17:33 Отправитель: Avl2k Отвечает Александр
Доброе время суток, ar43r! Ne znayu. Rzberisy sam (sama)!
Ответ отправлен: 26.11.2003, 09:48 Отправитель: Александр
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.