Cześć,
Zmienna r jest to zmienna lokalna, która jest wywołana poprzez wartość, a nie poprzez referencję i kończy swój żywot w momencie zwijania funkcji. Znika. Ale przed zakończeniem pracy funkcji pole promien, który już zmienną lokalną nie jest, bo obiekt istnieje cały czas w programie, zmienia swoją wartość. i tak otrzymujemy to co chcieliśmy - promien został zmieniony, kopia r skasowana a to wszystko zgodnie z zasadą hermetyzacji.
Wywołując jakąkolwiek funkcję bądź metodę, parametry otrzymują kopię wartości, a nie referencję do nich. Z tego co pamiętam, to Zelent poruszył ten wątek w kursie c++.