Здравствуйте, Bell, Вы писали:
А>>>Хотелбы спросить на сколько безобразна такая строка?
А>>> TArray(int sz): pArray(new int [sz]),iSz(sz){};
OS>>лучше explicit TArray...
B>А чем дучше?
Конструктор с одним параметром работает как преобразование типа.
Так будут работать, что вряд ли подразумевалось:
Здравствуйте, <Аноним>, Вы писали:
А>Добрый день.
А>Хотелбы спросить на сколько безобразна такая строка?
А> TArray(int sz): pArray(new int [sz]),iSz(sz){};
лучше explicit TArray...
Олег
... << RSDN@Home 1.0 beta 6a >>
Конструктор
От:
Аноним
Дата:
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#]
Массив какраз динамический.
Я предпочитаю сначала отлаживать на типах а потом делать шаблон.
Не колит ли такая строка глаз?
Тут не учтена одна тонкость: проверка на корректное выделение памяти.
А если пренебречь, вполнене читабельно.
P.S. Не забудь деструктор
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
new и memset принимают тип size_t, а не int. Если будет передано отрицательное число,
класс будет работать не так, как ожидалось. Не помешала бы проверка на диапазон допустимых значений.
BN>Здравствуйте, Аноним, Вы писали:
BN>Тут не учтена одна тонкость: проверка на корректное выделение памяти. BN>А если пренебречь, вполнене читабельно.
BN>P.S. Не забудь деструктор
Здравствуйте, OlegSv2, Вы писали:
OS>Здравствуйте, <Аноним>, Вы писали:
А>>Добрый день.
А>>Хотелбы спросить на сколько безобразна такая строка?
А>> TArray(int sz): pArray(new int [sz]),iSz(sz){};
OS>лучше explicit TArray...
Здравствуйте, Аноним, Вы писали:
А>>Хотелбы спросить на сколько безобразна такая строка?
Если делать именно такой класс (и забыть, что 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<>... Впрочем, он и так есть... :-)