As TVector is a class then you don't need to use var for returning/changing instance. For example:
[pascal]procedure TVector.Add( const vec : TVector; var aAddedVector : TVector );
begin
if aAddedVector <> nil then
aAddedVector.Assign( x + vec.x, y + vec.y, z + vec.z )
end;[/pascal]

will be better implemented as (will have one less memory dereference):

[pascal]procedure TVector.Add( const vec : TVector; aAddedVector : TVector );
begin
if aAddedVector <> nil then
aAddedVector.Assign( x + vec.x, y + vec.y, z + vec.z )
end;[/pascal]

PS. You probably know what "const vec : TVector" in ObjectPascal doesn't prevent from modifying vec internal data.