И еще один вопросец :)
От: LaptevVV Россия  
Дата: 04.06.08 08:15
Оценка:
Есть класс:
//----------- файл TArray.h
#include <iostream>
class Array 
{ public:
            // типы исключений:
    class bad_Index {};         // индекс вне диапазона
    class bad_Range {};         // если левый адрес > правый адрес
    class bad_Size {};          // неправильный размер
            // типы:
    typedef double         value_type;            
    typedef double*        iterator;
    typedef const double*  iterator_const;
    typedef double&        reference;             
    typedef const double&  const_reference;       
    typedef std::size_t    size_type;             
            // конструкторы/присваивание/деструктор:
    Array( size_type size, value_type k = 0.0 );
    Array( const Array& array );
    Array( iterator_const, iterator_const );
    ~Array(){ delete[] elems;   elems = 0; }           // освобождаем память
    Array& operator=( const Array& );
    size_type size() const { return Size; }        // текущий размер массива
            // доступ к элементам:
    reference       operator[]( size_type );
    const_reference operator[]( size_type ) const;
    reference       front() { return elems[0]; }           // первый элемент
    const_reference front() const { return elems[0]; }
    reference back() { return elems[size() - 1]; }      // последний элемент
    const_reference back() const { return elems[size() - 1]; }  
    void Swap( Array &other )                 // обменять с другим массивом
    { std::swap( elems, other.elems );           // стандартная функция обмена
      std::swap( Size, other.Size );
    }
    friend std::ostream& operator<< (std::ostream &t, const Array &V );
private:
    size_type Size;                           // выделено элементов в памяти
    value_type * elems;                               // указатель на данные
    void rangecheck ( size_type i ) const 
    {   if ( i >= size() )  throw bad_Index(); }
};
// ----------------файл TArray.cpp
#include "TArray.h"
#include <iostream>
Array::Array( size_type size, value_type k )
{   if ( size == 0 ) throw bad_Size();               // генерация исключения
    Size = size;
    elems = new value_type[Size];                   // создали массив
    for( size_type i = 0; i < Size; ++i )         // заполняем массив
        elems[i] = k;                               // значение по умолчанию
} 
Array::Array( iterator_const begin, iterator_const end ) 
{   if ( begin >= end ) throw bad_Range();           // генерация исключения
    Size = end - begin;                              // количество элементов
    elems = new value_type[Size];                   // создаем массив
    size_type i = 0;
    while( begin != end )                                // заполняем массив
        elems[i++] = *begin++;                        // копируем из массива
}
Array::Array( const Array &t )
: Size( t.Size ), elems( new value_type[Size] )
{    for( size_type i = 0; i < Size; ++i ) elems[i] = t.elems[i]; }
 
Array& Array::operator=( const Array &t )
{   Array temp( t );                 // временнный локальный объект temp = t
    Swap( temp );                         // обмен полями с текущим объектом
    return *this;                         // возврат нового текущего объекта
}                                                   // объект temp уничтожен
   
Array::reference Array::operator[]( size_type index )
{   if ( index < size() ) return elems[index];
    else throw bad_Index();                          // генерация исключения
}
Array::const_reference Array::operator[]( size_type index ) const
{   rangecheck( index );          // проверка индекса и генерация исключения
    return elems[index]; 
}
std::ostream& operator<< ( std::ostream &t, Array const& V )
{ if( V.size() > 0 )
     for( std::size_t i = 0; i < V.size(); ++i) t << V.elems[i] << ' ';
  return t;
}

В реализациях типы, объявленные в typedef, пишутся без префиксов. А если тип — возвращаемый, то требуется задавать префикс класса. Как внятно сформулировать такое требование? Или это только в Visual C++. NET 2005?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
префикс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.