No tengo Delphi para probar tu código. Sería de mucha ayuda saber el mensaje del error que te da.
Solo con el codigo no me doy cuenta del error.
Quizás se deba a como asignas el resultado de la función:
Código Delphi
[-]function cnumeronatural.mayor(a,b:cnumeronatural):integer;
var m:integer;
begin
if a.obtenervalor > b.obtenervalor then
m := a.obtenervalor
else
m := b.obtenervalor;
Result := m;
end;