#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;
}
Шаблоны C++
int()- размер массива
[]-доступ к индексу.
Помогите пожайлуста!!!
Код:
Перегружены те операторы,что тебе надо и некоторые другие.Лучше такие примеры делать самому,иначе не разберешься и не поймешь.