Konwersja typów (C++) - pytanie

0

Mam małe pytanie związane z konwersją typów w C++. Otóż mam w klasie moja_klasa funkcję konwertującą z typu danej klasy na typ int.

moja_klasa::operator int()
{
return (int) a;
}

Oczywiście w klasie mam też zadeklarowaną zmienną int a. Funkcję konwertującą napisałem by umożliwić przypisanie wartości zwracanej przez pewną funkcję składową do zmiennej globalnej. Interesuje mnie tutaj jedna rzecz - wartość (zmienna) zwracana przez tę funkcję składową to nie jest zmienna a, a jakaś inna zmienna składowa klasy. Dlaczego zatem przy tak napisanej funkcji konwertującej owa konwersja mimo wszystko zachodzi? Czy zmienna jaką posługuję się w funkcji konwertującej nie ma znaczenia, a konwersja jest możliwa w przypadku wszystkich zmiennych składowych których typ odpowiada zmiennej użytej w tej funkcji? A może w ogóle wszelkich zmiennych składowych? I co zrobić jeśli chciałbym mieć kilka funkcji konwertujących? (bo przeciążać ich nie można, czy wystarczy w takim wypadku, że konwersja odbywa się na inny typ?).

0

Ponieważ mój poprzeni post mógł być nieco niezrozumiały napiszę inaczej.

  • moja_klasa- klasa
  • funkcja_skł - funkcja składowa klasy moja_klasa zwracająca zmienną: zmienna_skł
  • zmienna_skł - zmienna składowa klasy moja_klasa
    -funkcja_kon - funkcja konwertująca klasy moja_klasa (kod w poście wyżej)
    -zmienna_a - zmienna składowa klasy moja_klasa użyta w funkcji konwertującej (patrz: post wyżej)
    -zmienna_glob - zmienna globalna

Teraz tak:
Tak wygląda definicja funkcji konwertującej:

moja_klasa::funkcja_kon //czyli operator int()
{
return (int) zmienna_a;
}

I teraz z zewnatrz wywoluje funkcja_skł która zwraca mi zmienna_skł i przypisuję tę zwracaną wartość zmiennej globalnej.
<cpp>
zmienna_glob=funkcja_skł();
<cpp>
Tak więc zachodzi tutaj konwersja mimo, iż w funkcji konwertującej nie ma mowy o zmienna_skł, a jedynie o zmienna_a

Mam nadzieję, że teraz jaśniej się wyraziłem i jasności nabrały też moje pytania.

0

Dobra - nie ważne :) Piszę głupoty bo dopiero zaczynam i mi się nieco pomieszało :)

0

Ojej :) rzuc mi na maila calym kodem :>

0

Już nieistotne - poradziłem sobie. Zresztą akurat tutaj konwersja nie była konieczna (nie wiem dlaczego kompilator początkowo wyrzucał błąd zaznaczając odmienność typów i nemożność konwersji, zrobiłem funkcję konwertującą i błąd zniknął, usunąłem tę funkcję i błędu nadal nie ma ?!?:) W każdym razie - już nadrobiłem część zaległości z konwersjami i temat uważam za zamknięty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1