[ Pobierz całość w formacie PDF ]
.GetAge();50: cout << " lat\n";51: cout << "Wywoluje funkcje FunctionTwo.\n";52: FunctionTwo(&Mruczek);53: cout << "Mruczek ma " ;54: cout << Mruczek.GetAge();55: cout << " lat\n";56: return 0;57: }58:59: // functionTwo, otrzymuje wskaźnik const60: const SimpleCat * const FunctionTwo61: (const SimpleCat * const theCat)62: {63: cout << "FunctionTwo.Wracam.\n";64: cout << "Mruczek ma teraz " << theCat->GetAge();65: cout << " lat \n";66: // theCat->SetAge(8); const!67: return theCat;68: }WynikTworze obiekt.Konstruktor klasy SimpleCat.Mruczek ma 1 latMruczek ma 5 latWywoluje funkcje FunctionTwo.FunctionTwo.Wracam.Mruczek ma teraz 5 latMruczek ma 5 latDestruktor klasy SimpleCat.AnalizaKlasa SimpleCat zawiera dwa akcesory: GetAge() w linii 13., będący funkcją const oraz SetAge() w linii 14., nie będący funkcją const.Oprócz tego posiada zmienną składową itsAge, deklarowaną w linii 17.Konstruktor, konstruktor kopiujący[Author ID1: at Wed Oct 31 10:02:00 2001]i[Author ID1: at Wed Oct 31 10:02:00 2001] oraz destruktor wypisują odpowiednie komunikaty.Jednak konstruktor kopiują[Author ID1: at Wed Oct 31 10:03:00 2001]cy[Author ID1: at Wed Oct 31 10:03:00 2001]i[Author ID1: at Wed Oct 31 10:03:00 2001] nie jest wywoływany, gdyż obiekt przekazywany jest poprzez referencję i nie jest tworzona żadna kopia.Na początku programu, w linii 42., tworzony jest obiekt, a w liniach[Author ID1: at Wed Oct 31 10:03:00 2001]i[Author ID1: at Wed Oct 31 10:03:00 2001] od [Author ID1: at Wed Oct 31 10:31:00 2001]43.do 45[Author ID1: at Wed Oct 31 10:03:00 2001].[Author ID1: at Wed Oct 31 10:03:00 2001]jest wypisywany wiek początkowy.W linii 47.zmienna składowa itsAge jest ustawiana za pomocą akcesora SetAge(), zaś wynik jest wypisywany w liniach[Author ID1: at Wed Oct 31 10:03:00 2001]i[Author ID1: at Wed Oct 31 10:03:00 2001] od [Author ID1: at Wed Oct 31 10:03:00 2001]48.do 50[Author ID1: at Wed Oct 31 10:03:00 2001].W tym programie nie jest używana funkcja FunctionOne().[Author ID1: at Wed Oct 31 10:04:00 2001] i [Author ID1: at Wed Oct 31 10:04:00 2001]P[Author ID1: at Wed Oct 31 10:04:00 2001]p[Author ID1: at Wed Oct 31 10:04:00 2001]osługujemy się tylko [Author ID1: at Wed Oct 31 10:04:00 2001]funkcją FunctionTwo().Uległa ona jednak niewielkiej zmianie; jej nagłówek został zmodyfikowany tak, że funkcja przyjmuje teraz stały wskaźnik do stałego obiektu i zwraca stały wskaźnik do stałego obiektu.Ponieważ parametr i wartość zwracana[Author ID1: at Wed Oct 31 10:04:00 2001] [Author ID1: at Wed Oct 31 10:05:00 2001]otna[Author ID1: at Wed Oct 31 10:05:00 2001] wciąż są przekazywane poprzez referencje, nie są tworzone żadne kopie, nie jest zatem wywoływany konstruktor kopiujący[Author ID1: at Wed Oct 31 10:05:00 2001]i[Author ID1: at Wed Oct 31 10:05:00 2001].Jednak obecnie obiekt wskazywany w funkcji FunctionTwo() jest obiektem const, więc nie można wywoływać jego metod, nie będących metodami const, czyli nie można wywołać jego metody SetAge().Gdyby wywołanie tej metody w linii 66.nie zostało umieszczone w komentarzu, program nie skompilowałby się.Zwróć uwagę, że obiekt tworzony w funkcji main() nie jest const, więc możemy dla niego wywołać funkcję SetAge().Do funkcji FunctionTwo()przekazywany jest adres tego zwykłego obiektu, ale ponieważ deklaracja tej funkcji określa, że ten parametr jest wskaźnikiem const do obiektu const, obiekt ten jest traktowany, jakby był stały!Referencje jako metoda alternatywnaListing 9 [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • centka.pev.pl
  •