Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Шаблоны классов


Автор: LipaNia 17.11.2007, 02:04
[C++]

Дано: число N и последовательность a1, a2, … aN

Создать шаблон класса, порождающего динамические одномерные массивы с элементами различных типов (вещественные, целочисленные, символьные и т.д.). Тип данных и результат являются параметрами по отношению к классу. программа должна иметь методы инициализации, конструктор, деструктор, просмотра значений созданного массива, а также для решения задачb формирования нового массива по следующим алгоритмам:

a1, -a1*a2, +a1*a2*a3, … ,(-1)N*a1*a2*…aN 

 smile  smile  smile 

 smile   

ЗАРАНЕЕ БЛАГОДАРЕН !!!

Автор: zkv 17.11.2007, 02:56

M
zkv
LipaNia, оформляйте темы в соответствии с правилами.

Автор: LipaNia 18.11.2007, 13:08
Спасибо за замечание!  smile 

Автор: Oleg_Ci 19.11.2007, 20:19
Накалякал.
Код

#include <iostream>
#include <clocale>
using namespace std;

////////////////// class //////////////////////////////////////////
template <typename type>
class MyArray{
public:
    type *m_Mas;
    int m_Size;
    MyArray():m_Mas(), m_Size(0){;}
    MyArray( int size, type begin = type());
    MyArray( const MyArray & ar );
    template <typename T>MyArray<type> & operator=( const MyArray<T> & ar );
    ~MyArray();
    type & operator[]( int pos ); // изменение значений массива
    void ReSize( int size, type data =0 ); // изменение размера массива
    void Display(); // вывод значений массива на консоль
    void Function(); // формирования нового массива по следующим алгоритмам (сам сделаешь)
};
///////////////////// function ///////////////////////////////////
template <typename type>MyArray<type>::MyArray( int size, type begin ): m_Size(size){
    m_Mas = new type[size];
    for( int i=0; i<size; ++i )
        *( m_Mas + i ) = begin;
}
template <typename type> MyArray<type>::~MyArray(){
    if( m_Mas != NULL )
        delete [] m_Mas;
}
template <typename type>MyArray<type>::MyArray( const MyArray<type> & ar ):m_Size(ar.m_Size){
    if( ar.m_Mas == NULL ) m_Mas = NULL;
    else{
        m_Mas = new type[m_Size];
        for( int i=0; i<m_Size; ++i ) // копируем массив
            m_Mas[i] = ar.m_Mas[i];
    }
}
template <typename type> template <typename T>
MyArray<type> & MyArray<type>::operator=(const MyArray<T> & ar ){
    if((void*)this == (void*)&ar ) return *this;
    if( m_Mas != NULL ){ // если массив не пуст
        delete [] m_Mas;
        m_Mas = NULL;
        m_Size = 0;
    }
    if( ar.m_Mas != NULL ){ 
        m_Size = ar.m_Size;
        m_Mas = new type[m_Size];
        for( int i=0; i<m_Size; ++i ) // копируем массив
            m_Mas[i] = ar.m_Mas[i];
    }
    return *this;
}
template <typename type> type & MyArray<type>::operator[](int pos){
    return m_Mas[pos];
}
template <typename type> void MyArray<type>::ReSize( int size, type data ){
    type *mas = m_Mas;

    if( size == 0 ){
        m_Mas = NULL;
        m_Size = 0;
    }
    else{
        m_Mas = new type[size];
        for( int i=0; i<size; ++i )
            if( i<((size<m_Size)?size:m_Size))
                m_Mas[i] = mas[i];
            else 
                m_Mas[i] = data;
            m_Size = size;
    }
    if( mas != NULL )
        delete [] mas;
}
template <typename type> void MyArray<type>::Display(){
    for( int i=0; i<m_Size; ++i )
        cout << "Array[" << i << "] = " << m_Mas[i] << "\n";
}
//////////////////// Main ////////////////////////////////////////
int main(){
    setlocale(LC_CTYPE, "Russian");
    
    cout << "Массив первый :\n";
    MyArray<int> ar(10,2); // создали один массив в 10 элементов со значением =2
    ar[3] = 100; // присвоили 
    ar[7] = 777;
    ar.Display(); // вывод значений

    cout << "\n\nМассив второй :\n";
    MyArray<float> ar2; // создали пустой второй массив
    ar2 = ar; // скопировали значения из первого
    ar2[1] = 11.111; 
    ar2.ReSize(20); // изменили размер
    ar2.Display();

    cin.sync();
    cout << "\n\nНажмите Enter для выхода.\n\n";
    getchar(); // пауза
    return 0;
}
////////////////// End main /////////////////////////


Автор: LipaNia 20.11.2007, 18:39
Спасибо! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)