Я пытаюсь создать свой собственный двойной связанный список для обучения. Моя книга показала структуру узла ниже, и мне было интересно, что это эквивалентно моему классу Node, который я создал? Является ли эта функция в структуре просто типом конструктора, который присваивает значения каждому типу данных в структуре?Различия между структурой и классом и построение узла для двойных связанных списков?
//===== Struct =====
struct Node
{
Node *next;
Node *prev;
std::string val;
Node(const std::string &value, Node *nextVal = NULL, Node *prevVal = NULL) :
val(value), next(nextVal), prev(prevVal) {}
};
//===== Class ====
class Node
{
public:
Node(std::string value = "", Node *pVal = NULL, Node *nVal = NULL);
virtual ~Node(void);
protected:
Node *next;
Node *prev;
std::string val;
};
Node(std::string value = "", Node *pVal = NULL, Node *nVal = NULL)
{
next = nVal;
prev = pVal;
val = value;
}
Вы, кажется, игнорируете аргумент 'value' в некоторых ваших конструкторах. Значения по умолчанию позволят вам написать один конструктор, но использовать его, как если бы он содержал ваши 4 определения. И вам действительно нужен «виртуальный» деструктор? Будете ли вы иметь полиморфные узлы? –
Спасибо за то, что я быстро сделал копию/вставку и забыл ее отредактировать. Я также обновил его, чтобы у одного конструктора были значения по умолчанию для других, которые могли бы просмотреть это позже. Существуют ли проблемы с производительностью между виртуальным и стандартным деструктором? – LF4
Да, есть. Один несет вызов виртуальной функции, другой - нет. –