Что лучше всего наследовать или использовать публичный объект?
Это мое сомнение: у меня есть два класса A и B. Я могу написать:
class A: public B {....}
Таким образом, an_instance_of_A может использовать методы B.
Но я мог бы также написать:
class A {
public:
B instance_B;
}
Таким образом, an_instance_of_A может использовать методы instance_B. (то есть методы B).
Я тоже так умею. Что лучше? Что быстро компилируется? Это то же самое? Благодарю.
3 ответа
Вы наследуете, когда есть отношения "есть". как между vehicle
а также car
,
Элемент данных используется, когда существует тип объекта "содержит" или "состоит из". лайк class school
состоит из class teacher
, class student
так далее
Как говорилось ранее, публичное наследование должно использоваться только в том случае, если A также является B (например, работник также является лицом).
Наличие экземпляра объекта внутри класса лучше для тестирования и инкапсуляции, если оно не является публичным. Пожалуйста, не выставляйте участников как общедоступных, за исключением POD. Это создает несколько проблем (например, кто-то может легко нарушить целостность вашего класса)
Публичное наследование описывает отношения. То есть все, что вы можете сделать с B, вы можете сделать с A.
Публичные объекты - это что-то совершенно другое и не очень распространенное. Если A может иметь более одного B, то вы не можете использовать наследование, поэтому используйте состав (объекты-члены). Должны ли они быть публичными или нет, зависит от A и B и от того, как вы хотите их использовать.
РЕДАКТИРОВАТЬ, кажется, этот вопрос дубликат близкого соответствия:
Предпочитаете композицию наследству?
Как сказал Джеймс, время компиляции не должно быть высоким приоритетом при выборе между наследованием или составлением, кроме как в особом случае.