2015-01-19 2 views
2

Я совершенно новое в C++, и я хотел бы узнать, хорошие практики с самого начала, так что мой вопрос объяснить на примере это:Включить объект внутри класса или лучше получить из этого класса?

Наличие:

class A 
{ 
    int mNumber; 
}; 

Если мне нужно использовать класс A внутри класса B, что лучше? включить объект?

class B 
{ 
    A * mpA; 
    int mColor; 
}; 

Или наследовать от класса A?

class B : public A 
{ 
    int mColor; 
}; 

Есть ли хорошая привычка говорить в целом, как это сделать?

+1

Ops! извините, я искал его, и я не мог найти ответ ... спасибо! :) – Breikdans

+1

Дубликат, связанный Джоном, очень хорошо объясняет состав/наследование. Предпочитают композицию в этом случае. Но я бы добавил к аспекту C++: не делайте 'A * mpA', do' A mA'. Значение по умолчанию в C++ заключается в том, чтобы обрабатывать объекты как значения (они есть), и прибегать к динамическому распределению, если это необходимо. – Angew

+1

@Angew 'A *' не подразумевает динамическое распределение. Если 'B' не принадлежит' mpA', не имеет смысла иметь объект как член, а указатель (умный или нет) - это путь. –

ответ

2

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

Композиция:

class A 
{ 
    B b; 
}; 

Наследование является:

class A : public B 
{ 
}; 

Используйте первым, когда отношения "имеет-А", а последнее, когда он "является разновидностью".

Ваш пример - свободный тип композиции - если элемент является указателем, он не (обязательно) означает собственность.

+1

Спасибо за хорошее и краткое объяснение! :) – Breikdans

+1

Кстати, как вы получили ответ через закрытие? – Angew

+1

@Angew Я верю, что в течение некоторого времени была небольшая проблема с закрытыми вопросами, которые не были закрыты на стороне сервера на пару минут, и вы можете легко преодолеть ограничение на стороне клиента. Учитывая, что я уже прошел 9/10 с моим ответом, когда вопрос закрылся, я не хотел его отбрасывать. –

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