Si entiendo correctamente, tenemos al menos dos formas diferentes de implementar la composición. (El caso de aplicación con punteros inteligentes se excluye por razones de simplicidad casi no utilizar STL y no tienen ningún deseo de aprender..)¿Cómo implementar la composición de clase en C++?
Vamos a echar un vistazo a Wikipedia example:
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
Por lo tanto, es una forma: tenemos un puntero para objetar como miembro privado. Uno puede volver a escribir a tener este aspecto:
class Car
{
private:
Carburetor itsCarb;
};
En ese caso tenemos un objeto como miembro privado. (Por cierto, ¿tengo razón al llamar a esta entidad un objeto desde el punto de vista de la terminología?)
En el segundo caso no es obligatorio llamar implícitamente al constructor predeterminado (si hay que llamar al constructor no predeterminado es es posible hacerlo en la lista de inicializadores) y destructor. Pero no es un gran problema ...
Y, por supuesto, en algunos aspectos estos dos casos difieren más apreciablemente. Por ejemplo, está prohibido llamar a métodos no const de la instancia Carburetor de métodos const de clase Car en el segundo caso ...
¿Hay alguna "regla" para decidir cuál usar? ¿Me estoy perdiendo de algo?
Creo que quiere decir "está prohibido llamar a métodos no const de instancia de Carburador desde métodos const de clase de Auto". –
@ Laurence Ooops. Por supuesto que sí ... – Wildcat
"[No] tengo ganas de aprender [el STL]". ¿Qué? Te estás perdiendo una gran parte de C++ al ignorar el STL. – rlbond