2016-10-13 2 views
1

Добрый день. Я занимаюсь кодированием проекта в университете, и мне хотелось бы знать, как я могу добавить элемент данных к узловой структуре (для связанного списка), но структура была определена ранее. Я не могу просто определить все это в исходной структуре, так как инструкции указывают иначе.C++ Добавление члена данных в структуру из другого базового класса

Вот моя структура, расположенная в ListAsSSL.h файле:

struct node 
{ 
    node* next; 
    Object obj; 
}; 

Могу ли я сделать это в другом файле заголовка:

struct node: node 
{ 
    node* previous; 
}; 

Спасибо. Я просто сам изучил шаблон Decorator, но он показывает только, как это делать с классами, а не с структурами.

Благодарим вас за помощь. Richard

+6

Классы и структуры - это одно и то же, но только с разным доступом. –

+4

Нет, вы не можете этого сделать. Вместо этого используйте наследование. –

+0

нет, вы не можете это переопределить – Raindrop7

ответ

4

Нет, вы не можете продлить struct. Создать новую struct с наследованием, а не, как это:

struct node 
{ 
    node* next; 
    Object obj; 
}; 

И в вашем другом файле:

struct newNode: node 
{ 
    node* previous; 
}; 

И в коде клиента, код, который обращается к-структуру, вы должны использовать новый вместо старой. Помните, что во многих случаях было создано наследование: Чтобы добавить дополнительные функции в существующий класс!

+1

@NathanOliver доступ по умолчанию общедоступен для структур, нет? – user463035818

+0

Это кажется неправильным для меня, вот упрощенный [пример] (http://cpp.sh/6zph) @NathanOliver –

+1

@ tobi303 Durp. struct not class. nvm me – NathanOliver

0

Можете ли вы создать новую структуру? Например:

struct nodeV2 
{ 
    Object obj; 

    nodeV2* next; 
    nodeV2* previous; 
}; 

Это, кажется, самый простой способ для меня. Таким образом, вы можете сохранить исходную структуру, не попадая в наследство.

Все самое лучшее.

+1

Это нарушает принципал связанного списка. не должны 'next' и' previous' быть типа 'nodeV2'? –

+0

Это была ошибка копирования-пасты с моей стороны. Виноват! Спасибо за указатель. Я исправил проблему, следуя вашим советам. – Ehsan

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