Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ шаблоны 
V
    Опции темы
Storm_tpv
Дата 17.12.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 4.12.2006

Репутация: нет
Всего: нет



Здраствуйте.
Не могу понять как сделать так чтобы можно было вводить массив любоей длины :(

Основное написал, а дальше не могу понять каков синтаксис описания создания массива любой длины.

Вот задание:
Создать шаблонную функцию, меняющую порядок элементов на обратный. 
    На пример:  1 2 3 4 5 6  -  6 5 4 3 2 1. Функция должна работать с массивом любой длины.

вот мой код:
Код

#include <iostream.h>

const int defaultSize = 10;

template <class T>
class array
{
public:
    array(int itsSize = defaultSize);
    array(const array &rhs);
    ~array() { delete [] pType; }

    array &operator=(const array&);
    T &operator[](int offset) { return pType[offset]; }
    const T &operator[](int offset) const
    {    return pType[offset];    }
    int getSize() { return itsSize; }
private:
    T *pType;
    int itsSize;
};

template <class T>
array<T>::array(int size):
itsSize(size)
{
    pType = new T[size];
    for (int i=0; i<size; i++)
        pType[i]=0;
}

template <class T>
array<T>::array(const array &rhs)
{
    itsSize = rhs.getSize();
    pType = new T[itsSize];
    for (int i=0; i<itsSize; i++)
        pType[i] = rhs[i];
}

template <class T>
array<T> &array<T>::operator =(const array &rhs)
{
    if (this==rhs)
        return *this;
    delete[] pType;
    itsSize = rhs.getSize();
    pType = new T[itsSize];
    for (int i=0; i<itsSize; i++)
        pType[i] = rhs[i];
    return *this;
}

int main()
{
    array<int> intArray;
    array<double> dblArray;

    for (int i=0; i<intArray.getSize(); i++)
    {
        intArray[i]=i*2;
        dblArray[i] = i*3;
    }
    for (int j=0; j<intArray.getSize(); j++)
    {
        cout << "intArray[" << j << "]:\t";
        cout << intArray[j] << "\t\t";
        cout << "dblArray[" << j << "]:\t";
        cout << dblArray[j] << "\t\t";
        cout << endl;
    }

    for (int j=0; j<intArray.getSize(); j++)
    {
        cout << "intArray[" << j << "]:\t";
        cout << intArray[j] << "\t\t";
        cout << "dblArray[" << j << "]:\t";
        cout << dblArray[j] << "\t\t";
        cout << endl;
    }
    return 0;
}





Добавлено через 3 минуты и 47 секунд
если я напишу так:

Код

array<int> intArray(14);


то при выводе элементов программа заглючивает.
PM MAIL   Вверх
onsql
Дата 17.12.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 3.12.2007

Репутация: нет
Всего: 3



А заглючивает небось на выводе double ? Если ты меняешь только размер массива intArray то при печати ты обращаешься к несуществующим элементам массива dblArray. Ставь у них одинаковый размер или печатай их отдельными циклами.
PM MAIL   Вверх
Storm_tpv
Дата 17.12.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 4.12.2006

Репутация: нет
Всего: нет



Код

#include <iostream.h>

//const int size=10;

template <class T>

class array
{
public:
    array(int itsSize = size);
//    array(const array &rhs);
    ~array() { if(pType) delete[] pType; }

    T& operator[](int offset) const { return pType[offset]; }
    int getSize() { return itsSize; }
    
private:
    T *pType;
    int itsSize;
};

template <class T>
array<T>::array(int size):itsSize(size)
{
    pType = new T[size];
    for (int i=0; i<size; i++)
        pType[i]=0;
}
/*
template <class T>
array<T>::array(const array &rhs)
{
    itsSize = rhs.getSize();
    pType = new T[itsSize];
    for (int i=0; i<itsSize; i++)
        pType[i]=rhs[i];
}
*/
int main()
{
    array<int> intArray(14);

    for (int i=0; i<intArray.getSize(); i++)
    {
        cin >> intArray[i];
    }

    for (int j=0; j<intArray.getSize(); i++)
    {
        cout << intArray[j] << endl;
    }
    return 0;
}

я даже так сделал! Все раво при выводе зацикливается



Добавлено через 1 минуту и 41 секунду
все работает

я нашел синтаксическую ошибку

Код

for (int j=0; j<intArray.getSize(); i++)


smile
PM MAIL   Вверх
onsql
Дата 17.12.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 3.12.2007

Репутация: нет
Всего: 3



i++ вместо j++ во втором цикле? smile

И в самом первом исходнике
Код

template <class T>
array<T> &array<T>::operator =(const array<T> &rhs)
{
   //    if (this==rhs)  <- должна вылететь ошибка когда будешь присваивать массивы
     if(this == &rhs)
        return *this;
    delete[] pType;
    itsSize = rhs.getSize();
    pType = new T[itsSize];
    for (int i=0; i<itsSize; i++)
        pType[i] = rhs[i];

  return *this;
}

 

Это сообщение отредактировал(а) onsql - 17.12.2007, 22:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.