Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2014, 07:38   #1
Geometry
Новичок
Джуниор
 
Регистрация: 23.03.2014
Сообщений: 2
По умолчанию Шаблоны классов

Здравствуйте! Просьба помочь с решением задачи:
Создать шаблон класса для работы с массивом произвольного типа данных. Шаблон должен включать:
указатель, хранящий адрес размещения массива в динамической памяти;
целочисленную переменную, показывающую количество занятых элементов массива;
конструкторы: с параметрами, по умолчанию, копирования;
метод «обработка массива» (на начальном этапе метод выводит на консоль содержимое массива);
деструктор
и другие необходимые для работы методы (например, перегрузка операций индексирования и присваивания, методы ввода / вывода и т.д.).

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

В функции main() показать использование созданного класса, включая ситуации, приводящие к генерации исключений; показать инстанцирование шаблона для различных типов.
На основе данного шаблона создать
Дана последовательность цифр 1 и 0. Преобразовать заданное двоичное число в восьмеричное.

Есть наработки, но непонятен один нюанс, как пробразовать из двоичной в восьмеричную при том, что тип массива произволен.

Код:
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <ctime>
#include <climits>
 
using namespace std;
 
template<typename T>
class Translate {
  
  private:
    T* array;
    int size;
  public:
         
    ~Translate(){
        if(array){
            delete [] array;
        }
    }
    
    const T& operator [] (int);
    Translate() {};
    Translate(T*, int);
    Translate(const Translate&);
    void enter();
    void print();
    T* translateToOct();
    
      
};
 
template<typename T>
 Translate <T> :: Translate(const Translate& a) : array(a.array), size(a.size) {}
 
template<typename T>
 Translate <T> :: Translate(T* a, int n) {
  
  if(size < 0 || size > INT_MAX) {
    
    throw "Некорректный размер массива!";
          
  }
  
  array = a;
  size = n; 
           
}
 
template<typename T>
 const T& operator [] (int index) {
   
   if(index < size && index >= 0){
            
        return array[index];
        
    } else {
         
        throw "Выход за границы массива!\n";
    }
       
 }
 
template<typename T>
 void Translate <T> ::  enter() {
   
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   
   srand(time(0));
   
   bool t = false;
   bool b = false;
   
   cout << "Размер массива фиксирован? (0 - нет/1 - да)" << endl;
   cin >> t;
   
   cout << "Вводить элементы вручную? (0 - нет/1 - да)" << endl;
   cin >> b;
   
   if(t = true) {
     
     cout << "Введите размерность: " << endl;
     cin >> size;
     
     if(size < 0 || size > INT_MAX) {
    
       throw "Некорректный размер массива!";
          
     }
 
     array = new T[size];
     
     if(b == true) {
     
         cout << "Введите элементы массива: " << endl;
         
         for(int i = 0; i < size; i++) {
            
            cin >> array[i];
                 
         }
         
     } else {
        
        for(int i = 0; i < size; i++) {
            
             array[i] = rand() % 1;        
        }  
            
     }
        
   } else {
          
     cout << "Введите элементы массива (нажмите esc по окончании ввода): " << endl;  
      
      int i = 0;
      size = 10;
      array = new T[size];
      T* aux;
 
     cout << "Введите элементы массива: " << endl;
     
     do{
    
       if(i == size) {
           
         aux = new T[((i * 3) >> 1) + 1];
         
         for(int j = 0; j < size; j++) {
             
             aux[j] = array[j];    
                 
         }
         
         size = i;  
            
       }
    
       if(b == true) {
          cin >> array[i];  
       } else {
          array[i] = rand() % 1;    
       }
       
       
       i++;
    
     } while(getch() != 27);
     
     size = i;
   }
          
}
template<typename T>
 void Translate <T> :: print() {
  
   cout << endl << "Содержание массива: " << endl;
   for(int i = 0; i < size; i++) {
       
       cout << array[i] << endl;    
           
   }
      
 }
template<typename T>
 T Translate <T> :: translateToOct() {
    
    T returnValue;
 
    //Что делать здесь
    
    for(int i = 0; i < size; i++) {
            
            
          
    } 
             
 }
      
 
int main() {  
}
Geometry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ шаблоны классов world12_tk Помощь студентам 0 20.12.2011 03:03
C++, шаблоны функций и классов DimR Фриланс 9 09.03.2011 15:03
Шаблоны классов __Demon__ C++ Builder 11 03.03.2010 01:04
Шаблоны пользовательских классов MaTBeu Общие вопросы C/C++ 2 23.03.2008 19:02