implement friend opertions