Po pierwsze: twoja funkcja powinna przyjmować przez referencje, żeby byl widoczny jakikolwiek efekt jej działania.
Po drugie: zadeklarowałeś typ zwracany, ale brak instrukcji return.
Także sama funkcja (a raczej szablon) powinna wyglądać tak:
template <class Typ>
Typ zwieksz_cene (Typ & a)
{
a.cena += 100;
return a;
}
Teraz ofc zwraca kopie zmodyfikowanego obiektu. Ale modyfikuje oryginał przekazany do funkcji.
Co do deklaracji friend:
friend Samolot zwieksz_cene<Samolot>(Samolot&);