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

Ваш аккаунт

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

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

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

Шаблоны C++

9.8K
04 июля 2007 года
FISH.ka
35 / / 07.01.2007
используя шаблоны создаьт класс - одномерный массив и дополнительно перезагрузить следующие операции:
int()- размер массива
[]-доступ к индексу.
Помогите пожайлуста!!!
320
04 июля 2007 года
m_Valery
1.0K / / 08.01.2007
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>
class Array{
public:
    Array(int = 10);
    Array(const Array &);
    ~Array();
    int operator()() const{
         return size;
    }
    void print()const{
      for(int i = 0;i < size;++i)
          cout<<ptr<<' ';
      cout<<endl;
    }
    void input(){
          for(int i = 0;i < size;++i)
          cin>>ptr;
    }
    const Array &operator=(const Array &);
    bool operator==(const Array &) const;
    bool operator!=(const Array &right) const{
     return ! (*this == right);
    }
    // для не константных обьектов,возвращает lvalue
    int &operator[](int);
    // для  константных обьектов,возвращает rvalue
    const int &operator[](int) const;
private:
    int size;
    T *ptr;//указатель на 1-й элемент массива
};
template<class T>
Array<T>::Array(int arraySize){
    size = (arraySize > 0 ? arraySize : 10);
    ptr = new T[size];
    for(int i = 0;i < size;++i)
        ptr = 0;
}
template<class T>
Array<T>::Array(const Array &arrayToCopy)
: size(arrayToCopy.size){
  ptr = new T[size];
  for(int i = 0;i < size;++i)
      ptr = arrayToCopy.ptr;
}
template<class T>
Array<T>::~Array(){
  delete[] ptr;
}
template<class T>
const Array<T> &Array<T>::operator = (const Array &right){
    if(&right != this){
        if(size != right.size){
          delete[] ptr;
          size = right.size;
          ptr = new T[size];
        }
        for(int i = 0;i < size;++i)
            ptr = right.ptr;
    }
    return *this;
}
template<class T>
bool Array<T>::operator == (const Array &right) const{
    if(size != right.size)
        return false;
    for(int i = 0;i < size;++i)
        if(ptr != right.ptr)
            return false;
    return true;
}
template<class T>
int &Array<T>::operator [] (int subscript){
    if(subscript < 0 || subscript >= size){
      cout<<"\nError : Subscript "<<subscript
      <<"out of range"<<endl;
      exit(1);
    }
    return ptr[subscript];
}
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    Array<int> integer1(6);
    Array<int> integer2;
    wcout<<L"размер 1-го массива целых чисел  = "<<
        integer1();
    wcout<<L"\nмассuв после инициализации"<<endl;
    integer1.print();
    wcout<<L"размер 2-го массива целых чисел  = "<<
        integer2();
    wcout<<L"\nмассuв после инициализации"<<endl;
    integer2.print();
    wcout<<L"Введите массив 1 "<<endl;
    integer1.input();
    wcout<<L"\nмассuв после ввода"<<endl;
    integer1.print();
    if(integer1 == integer2)
        wcout<<L"массивы равны"<<endl;
    else
        wcout<<L"массивы не равны"<<endl;
    wcout<<L"Введите массив 2 "<<endl;
    integer2.input();
    wcout<<L"\nмассuв 2 после ввода"<<endl;
    integer2.print();
    Array<float> Float(4);
    wcout<<L"\nмассuв 3 float после инициализации"<<endl;
    Float.print();
    wcout<<L"Введите массив 3 "<<endl;
    Float.input();
    wcout<<L"\nмассuв 3 float после ввода"<<endl;
    Float.print();
    Array<char> Char(5);
    wcout<<L"Введите символьный массив 4 "<<endl;
    Char.input();
    wcout<<L"\nмассuв 4 char после ввода"<<endl;
    Char.print();
    return 0;
}

Перегружены те операторы,что тебе надо и некоторые другие.Лучше такие примеры делать самому,иначе не разберешься и не поймешь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог