Конструктор
От: Аноним  
Дата: 05.03.03 12:54
Оценка:
Добрый день.

Хотелбы спросить на сколько безобразна такая строка?



class TArray {
        int *pArray;
        int iSz;
public:
        TArray(): pArray(NULL),iSz(0){};
        TArray(int sz): pArray(new int [sz]),iSz(sz){};
};
Re: Конструктор
От: Аноним  
Дата: 05.03.03 13:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.


А>Хотелбы спросить на сколько безобразна такая строка?


А>

А>

А>class TArray {
А>        int *pArray;
А>        int iSz;
А>public:
А>        TArray(): pArray(NULL),iSz(0){};
А>        TArray(int sz): pArray(new int [sz]),iSz(sz){};
А>};
А>


Если массив не динамический (в ходе работы не меняет размер), то красивше былобы так:

template <int iSize> class TArray
{
public:
   TArray(): iSz(iSize){};

protected:
   int iSz;
   int miArray[iSize];
};


кстати можно и не "завязываться" на int а сделать шаблон


template <class Type, int iSize> class TArray
{
public:
   TArray(): iSz(iSize){};

protected:
    int  iSz;
   Type  mArray[iSize];
};
Re[2]: Конструктор
От: Аноним  
Дата: 05.03.03 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Добрый день.


А>>Хотелбы спросить на сколько безобразна такая строка?


А>>

А>>

А>>class TArray {
А>>        int *pArray;
А>>        int iSz;
А>>public:
А>>        TArray(): pArray(NULL),iSz(0){};
А>>        TArray(int sz): pArray(new int [sz]),iSz(sz){setmem(pArray,0,sizeof(int)*sz)};
А>>};
А>>


А>Если массив не динамический (в ходе работы не меняет размер), то красивше былобы так:

А>[c#]

Массив какраз динамический.
Я предпочитаю сначала отлаживать на типах а потом делать шаблон.
Не колит ли такая строка глаз?
Re[3]: Конструктор
От: BOPOH_N Россия  
Дата: 05.03.03 13:39
Оценка:
Здравствуйте, Аноним, Вы писали:

Тут не учтена одна тонкость: проверка на корректное выделение памяти.
А если пренебречь, вполнене читабельно.

P.S. Не забудь деструктор
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[4]: Конструктор
От: vden Россия  
Дата: 05.03.03 14:10
Оценка:
Здравствуйте, BOPOH_N, Вы писали:

new и memset принимают тип size_t, а не int. Если будет передано отрицательное число,
класс будет работать не так, как ожидалось. Не помешала бы проверка на диапазон допустимых значений.

BN>Здравствуйте, Аноним, Вы писали:


BN>Тут не учтена одна тонкость: проверка на корректное выделение памяти.

BN>А если пренебречь, вполнене читабельно.

BN>P.S. Не забудь деструктор
... << RSDN@Home 1.0 beta 6a >>
Re: Конструктор
От: OlegSv2 Россия  
Дата: 05.03.03 14:49
Оценка: 4 (1)
Здравствуйте, <Аноним>, Вы писали:

А>Добрый день.


А>Хотелбы спросить на сколько безобразна такая строка?


А> TArray(int sz): pArray(new int [sz]),iSz(sz){};


лучше explicit TArray...

Олег
... << RSDN@Home 1.0 beta 6a >>
Re[2]: Конструктор
От: Bell Россия  
Дата: 05.03.03 16:38
Оценка:
Здравствуйте, OlegSv2, Вы писали:

OS>Здравствуйте, <Аноним>, Вы писали:


А>>Добрый день.


А>>Хотелбы спросить на сколько безобразна такая строка?


А>> TArray(int sz): pArray(new int [sz]),iSz(sz){};


OS>лучше explicit TArray...


А чем дучше?
Любите книгу — источник знаний (с) М.Горький
Re[3]: Конструктор
От: OlegSv2 Россия  
Дата: 05.03.03 19:30
Оценка: 7 (1)
Здравствуйте, Bell, Вы писали:

А>>>Хотелбы спросить на сколько безобразна такая строка?


А>>> TArray(int sz): pArray(new int [sz]),iSz(sz){};


OS>>лучше explicit TArray...


B>А чем дучше?


Конструктор с одним параметром работает как преобразование типа.
Так будут работать, что вряд ли подразумевалось:

void Foo( const TArray& );

void Foo2()
{
    Foo(32); // ??
    TArray arr;
    ...
    arr=64; // ??
}
... << RSDN@Home 1.0 beta 6a >>
Re[4]: Конструктор
От: Bell Россия  
Дата: 06.03.03 07:56
Оценка:
Здравствуйте, OlegSv2, Вы писали:

Да, это я пропустил...
Любите книгу — источник знаний (с) М.Горький
Re[4]: Конструктор
От: Lostar Россия  
Дата: 06.03.03 08:34
Оценка:
Здравствуйте, BOPOH_N, Вы писали:

BN>Тут не учтена одна тонкость: проверка на корректное выделение памяти.

BN>А если пренебречь, вполнене читабельно.

Если используется new бросающее исключение то все нормально.
... << RSDN@Home 1.0 beta 6a >>
С уважением, Николай.
Re[2]: Конструктор
От: centurn Россия  
Дата: 12.03.03 09:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>Хотелбы спросить на сколько безобразна такая строка?


Если делать именно такой класс (и забыть, что new теоретически может обломаться), то та строка имхо вплне нормальна. Да вот только... (См. ниже)

А>Если массив не динамический (в ходе работы не меняет размер), то красивше былобы так:


<Скип>

А>кстати можно и не "завязываться" на int а сделать шаблон


А>
А>template <class Type, int iSize> class TArray
А>{
А>public:
А>   TArray(): iSz(iSize){};

А>protected:
А>    int  iSz;
А>   Type  mArray[iSize];
А>};
А>


Во-первых, при таком раскладе я бы сделал хотя бы так:


template <class Type, int iSize> class TArray
{
public:
  TArray(){};

protected:
  static const int iSz = iSize;
  Type  mArray[iSize];
};


Зачем увеличивать sizeof() на лишний int, да еще при инициализации лишнюю операцию делать... А если размер динамический, то есть std::vector<>... Впрочем, он и так есть... :-)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.