Composición

Una relación complementaria a la herencia (isA), es la relación de composición, que puede adoptar al menos dos formas: la composición fuerte "es parte de" (agregación, también conocida como isPartOf), y la simple colaboración entre clases.
Cuando dos clases están relacionadas con isPartOf, los objetos de la clase contenida se crean cuando se crea la clase contenedora, y se destruyen cuando se destruye ésta última. No tienen sentido sin ella.
Otro tipo de relaciones entre clases no implican este significado. Por ejemplo, la clase Proveedor puede colaborar con la clase Compras, pero la eliminación de un proveedor no implica que se deje de comprar a otro proveedores, y viceversa.

Ejemplo de agregación

Un ejemplo típico de agregación es el de la línea que tiene un punto de comienzo y un punto de finalización:

#include <iostream>

class Punto {
private:
int x;
int y;
public:
Punto(int a, int b) : x(a), y(b)
{}
void dibuja()
{ std::cout << x << ',' << y << std::endl;}
};

class Linea {
private:
Punto * p1;
Punto * p2;
public:
Linea(int a, int b, int c, int d)
{
p1 = new Punto( a, b );
p2 = new Punto( c, d );
}

~Linea()
{ delete p1;
delete p2;
}

void dibuja()
{ p1->dibuja();
std::cout << " a ";
p2->dibuja();
}
};

using namespace std;

int main()
{
Linea l( 10, 10, 100, 100 );

l.dibuja();
}