Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как определить размерность массива в классе конструктором?

29K
18 ноября 2008 года
EXAngel
29 / / 08.07.2008
Не могу понять как можно задать размерность массива в классе с помощью конструктора, если она должна быть константной.
Я думаю из уровня задачи, понятно что об STL речь пока не идёт..
Возможно ли её решить без динамических массивов и STL?
5
18 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: EXAngel
Не могу понять как можно задать размерность массива в классе с помощью конструктора, если она должна быть константной.

Реальный размер памяти, выделенный под матрицу - аккурат 10х10 ячеек (даблов, флоатов, интов - не важно).

Цитата: EXAngel
Я думаю из уровня задачи, понятно что об STL речь пока не идёт..
Возможно ли её решить без динамических массивов и STL?


Пользователь класса задает нужный ему размер матрицы, фактической размерностью меньшей, чем реальный размер памяти. Например 5х6 ячеек. Или 20х3 (памти такая матрица займет меньше чем 10х10).
Ваша задача переопределить у этого класса оператор [] и добавить в него проверку выхода за границу. Логическая граница какраз задается из конструктора.
Если требуемый пользователем размер матрицы больше чем 10х10 ячек, то можно, к примеру, генерировать исключение.

29K
18 ноября 2008 года
EXAngel
29 / / 08.07.2008
Честно говоря не понял, я еще начинающий, не могли бы вы пояснить примером?
Вот что я написал, и это естественно не сработало:
Код:
#include <iostream>

using namespace std;

class matrix
    {
    private:
        int a;
        int b;
        int dim[a];

    public:
        matrix ( int f, int s )                
        {
            a = f;
            b = s;
        }
   
    };

int main()
    {
    return 0;
    }
4.8K
18 ноября 2008 года
anty
89 / / 29.10.2006
так память не выделяют =)
Код:
class matrix
    {
    private:
        int a;
        int b;
        int **dim;

    public:
        matrix ( int f, int s )                
        {
            a = f;
            b = s;
                        dim = new int*[a];      
                        for (int i = 0;i < a; i++)
                           dim = new int;  
                }    
   
    };


только еще ~matrix() добавить нада х)
29K
18 ноября 2008 года
EXAngel
29 / / 08.07.2008
Это динамический массив?
Цитата:
только еще ~matrix() добавить нада х)


В смысле пустой конструктор?

4.8K
18 ноября 2008 года
anty
89 / / 29.10.2006
ну получается что динамический х)
это диструктор,он обозначется так ~matrix(). В конструкторе ты выделяешь память, а в диструкторе ты освобождаешь ее. Смысл ясен ?
29K
18 ноября 2008 года
EXAngel
29 / / 08.07.2008
Смысл не ясен :) Я пока не изучал указатели и динамические массивы.
Наверное автор торопит события..

Т.е. не существует способа решить задачу без динамических массивов и STL?

P.S. В любом случае спасибо за помощь, буду изучать.
4.8K
18 ноября 2008 года
anty
89 / / 29.10.2006
аааа еще если у тебя массив не динамический... например создаешь массив 10х10, а потом просто индексами манипулируешь например так:
Код:
#include <iostream>

using namespace std;

class matrix
    {
    private:
        int I;
        int J;
        int dim[10][10];

    public:
        matrix ( int f, int s )                
        {
            I = f;
            J = s;
        }
                 void init();
             void show();
    };
void matrix::init(){
for(int i=0;i<I;i++){
 for(int j=0;j<J;j++){
  .....}
}
..........

задача имено так и решается походу х))
29K
18 ноября 2008 года
EXAngel
29 / / 08.07.2008
Так получается массив можно уменьшать но не увеличивать, просто ограничиваешь запись в массив..

Я бы не догадался, спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог