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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2012, 20:37   #1
brewsters
 
Регистрация: 15.07.2012
Сообщений: 3
По умолчанию Шаблон класса

Здравствуйте. Пытался сделать шаблон для класса, что-то не получается, посмотрите код, пожалуйста, и скажите что не так.

h-файл:
Код:
#ifndef KDEQUE_H
#define KDEQUE_H
#include <iostream>
using namespace std;

template<class T> 
class KDeque
{
 friend ostream& operator<<(ostream& os, KDeque<T> const& r);
 public:
  KDeque():m(new T[M]),first(NULL),last(M),iSz(NULL)  {}
  KDeque(int k):m(new T[k]),first(NULL),last(k),iSz(NULL) {}
  ~KDeque(){clear(); delete []m;}
  bool is_empty()const;
  int size()const;
  void clear();
  T front()const;
  T back()const;
  void pushback(T r);
  void pushfront(T r);
  void popfront();
  void popback();
 private:
  int first;
  int last;
  int iSz;
  T* m;
  static const int M=10;
};

#endif
cpp-файл:
Код:
#include "KDeque.h"

template <class T>
bool KDeque<T>::is_empty() const
{
 return iSz == 0;
}

template <class T>
int KDeque<T>::size() const
{
 return iSz;
}

template <class T>
void KDeque<T>::clear()
{
 for(int i = 0; i < size(); i++)
  m[i]=0;
 iSz = 0;
}

template <class T>
T KDeque<T>::front() const
{
 return m[0];
}

template <class T>
T KDeque<T>::back() const
{
 return m[iSz-1];
}

template <class T>
void KDeque<T>::pushback(T r)
{
 if(iSz == last)
 {
  --iSz;
  m[iSz] = r;
  ++iSz;
 }
 else
 {
  m[iSz] = r;
  ++iSz;
 }
}

template <class T>
void KDeque<T>::popback()
{
 if(iSz > 0)
 {
  --iSz;
  m[iSz] = 0;
 }
 else cout<<"Deque is empty!"<<endl;
}

template <class T>
void KDeque<T>::pushfront(T r)
{
 int b, v = r;
 if(iSz == last)
 {
  for(int i = 0; i < iSz; i++)
  {
   b = m[i];
   m[i] = v;
   v = b;
  }
 }
 else
 {
  for(int i = 0; i <= iSz; i++)
  {
   b = m[i];
   m[i] = v;
   v = b;
  }
  ++iSz;
 }
}

template <class T>
void KDeque<T>::popfront()
{
 if(iSz > 0)
 {
  for(int i = 0; i < iSz; i++)
   m[i]=m[i+1];
  --iSz;
 }
 else cout<<"Deque is empty!"<<endl;
}

template<class T>
ostream& operator<<(ostream& os, KDeque<T> const& r)
{
 int t = r.size();
 for(int i = 0; i < t; i++)
  os << r.m[i] <<" ";
 return os;
}
brewsters вне форума Ответить с цитированием
Старый 15.07.2012, 20:40   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Реализация методов шаблона класса должна находится в том же файле, где и объявление самого шаблона.

(убери спп, запихав все в один хэдер)
_Bers вне форума Ответить с цитированием
Старый 15.07.2012, 20:53   #3
brewsters
 
Регистрация: 15.07.2012
Сообщений: 3
По умолчанию

Спасибо, помогло.Еще такой вопрос если я хачу реализавать шаблон отдельно скажем для char* мне тоже его писать в h?
brewsters вне форума Ответить с цитированием
Старый 15.07.2012, 21:00   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от brewsters Посмотреть сообщение
Спасибо, помогло.Еще такой вопрос если я хачу реализавать шаблон отдельно скажем для char* мне тоже его писать в h?
Есть два варианта работы с шаблонами:

1. "По простому".
2. "Для тех, кто понимает".

По простому - пихаешь все, что нужно в один хедер и не паришься.
(В твоём случае, можно специализацию прописать чуть ниже, сразу за объявлением главного шаблона)

Для углубленного понимания: гугли книги, и читай. Особое внимание удели теме "инстанцирование шаблона".

Просто, "углубленное понимание шаблонов" в двух словах не выскажешь.
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблон класса дерева Last Общие вопросы C/C++ 1 22.05.2012 09:23
шаблон класса списка Anton1355 Помощь студентам 0 13.03.2012 20:59
Шаблон класса списка lirikoff Помощь студентам 6 03.09.2010 22:44
C++шаблон класса cati Помощь студентам 1 30.04.2010 00:24
Шаблон класса androidvsu Общие вопросы C/C++ 2 26.04.2009 11:57