2013-10-08 4 views
0

мне нужно изменить первую строку: template <class T> class Node{Как изменить класс на класс шаблона?

class Node { 
private: 
    double data; 
    Node* next; 
public: 
    Node(double); 
    virtual ~Node(); //for later use of polymorphismi, review the topic again 

    friend class Stack; // allows dStack for private member access 
}; 

Node::Node(double data) { 
    this->data = data; 
    next = 0; 
} 

Node::~Node() { 
} 

, но я не уверен всей внутренней работы мне нужно изменить. Нужно ли мне просто менять частный элемент данных и функцию общего узла?

+3

Почему вы хотите сделать это? Вы хотите сохранить 'T' вместо' double'? (подсказка: это приводит к ответу) –

ответ

1

Я думаю, что вы ищете что-то вдоль линий следующим:

template<typename T> 
class Node 
{ 
private: 
    T data; 
    Node* next; 
public: 
    Node(const T& d); 
    virtual ~Node(); 
    // ... etc 
}; 

Обратите внимание, что вам нужно будет либо реализовать класс шаблона инлайн, в том же файле, или включить реализацию в в нижней части файла заголовка.

1

Дело в том, что вы меняете свой класс, чтобы его можно было использовать для других типов, кроме double, например int, float и т. Д. Таким же образом. Если мы подумаем об этом более абстрактно, вам нужно использовать класс для объектов типа T, где T может быть любым из перечисленных выше типов (или даже больше). Итак, в общем, вам нужно поставить template <class T> (Установка его как класса шаблона) перед вашим классом и заменить double на T.

0

для объявления класса:

template<typename T> 
class Node 

для реализации функций класса:

template<typename T> 
Node<T>::Node() 
+0

Вы не можете разделить классы шаблонов на 2 файла, если вы не включите файл реализации в конец файла заголовка. –

+0

вы можете с Явным экземпляром .. я отредактирую ответ –

+0

Я думаю, вы имеете в виду специализированную специализацию. Явное создание экземпляра создает объект, фактически не используя его (по-прежнему требуется, чтобы реализация существовала). Специализация может работать, но тогда вы не можете использовать класс шаблонов для чего-либо, кроме того, что вы специализируетесь. –

Смежные вопросы