Исходя из того, что вы сказали в своем комментарии об указании вашего профессора использовать наследование, я думаю, что вы должны использовать частное наследование.
Частное наследованиедопустимая особенность C ++, но часто это не очень хороший выбор дизайна.Я не буду вдаваться в подробности, я не рекомендую это вообще, я оставлю вас искать это в другом месте на SO, но также рекомендую книги Скотта Мейера, эффективные C ++ и более эффективные C ++, которые покрывают это.
(защищенное наследование, с другой стороны, очень необычно)
В своем вопросе вы, похоже, начинаете с публичного наследования и пытаетесь сделать некоторые унаследованные функции частными с помощью.Это плохой выбор дизайна, как упоминалось в комментариях.Это нарушает принцип подстановки Лискова.Так как наследование PUBLIC подразумевает is-a, мы можем представить код, который создает ссылку на базовый класс для объекта производного типа, что тогда произойдет, когда мы попытаемся вызвать скрытую функциональность с этой ссылкой на базовый класс?
Derived d;
Base& b = d;
b.HiddenFunction(); // calling the function on d even though you thought you hid it
Если вместо этого вы используете частное наследование, вы можете использовать с помощью для публикации те частные унаследованные функции, которые безопасны для представления в производном классе.
class OrderedLinkedList : private LinkedList
{
public:
using LinkedList::ItemCount; // expose some specific base functionality
};
Если использование не делает работуИз-за перегруженных функций вы можете добавить только те перегрузки, которые хотите предоставить, и реализовать их, просто вызвав базовую функцию.В таких случаях, если вам необходимо уточнить, вызывать ли базовую или производную версию, вы можете добавить префикс имени функции к имени класса, например:
void SomeFunction()
{
// call base version, not this derived version recursively
NameOfBaseClass::SomeFunction();
}
В реализации производного класса открытые и защищенные члены(частный) унаследованный базовый класс доступен без необходимости делать что-либо вроде добавления использования.
Частное наследование не является отношением is-is, как публичное наследование, поскольку мы не можем ссылаться на производные объекты как ссылки / указатели набаза.Частное наследование является "реализованным в терминах".
Поскольку частное наследование не является is-a, нельзя заменять такие производные объекты на базу, и, таким образом, принцип замены Лискова просто не применяется.