 |
Podręczniki akademickie : Wydawnictwo SGGW
Język programowania wysokiego poziomu C++ Programowanie obiektowe
wydawnictwo: Wydawnictwo SGGW autor: Jałowiecki Piotr ISBN: 83-7244-749-7
wydanie: 2006 format: B5, str. 228, oprawa miękka
Język programowania wysokiego poziomu C++ Programowanie obiektowe Jedną z cech wyróżniających język C++ spośród innych języków programowania w okresie, w którym pojawił się na rynku, była możliwość przeciążania funkcji. Technika ta nie mogła być stosowana w językach, w których kompilator nie pozwalał na definiowanie kilku funkcji o takiej samej nazwie, w tym samym zakresie ważności. Oznaczało to, że w każdym miejscu programu mogły być dostępne tylko funkcje o różnych nazwach. Sytuacja taka miała miejsce w wielu popularnych językach programowania wysokiego poziomu, między innymi w Pascalu, Fortranie czy C, który jest protoplastą języka C++. Jedną z konsekwencji pojawienia się możliwości przeciążania funkcji w obiektowym języku programowania C++ jest dosyć częste uznawanie tej techniki za obiektową lub przynajmniej z pogranicza programowania obiektowego i nieobiektowego. Dzieje się tak również dlatego, że istotą przeciążania jest automatyczny wybór przez kompilator odpowiedniej wersji spośród funkcji o takiej samej nazwie w momencie jej wywołania w zależności od typów argumentów, z którymi funkcję wywołano. Dzięki temu użytkownik nie musi samodzielnie troszczyć się o dopasowywanie składni wywołania funkcji do odpowiedniej jej wersji. Niemniej traktowanie przeciążania funkcji jako techniki obiektowej jest kwestią problematyczną i zależy od sformułowania definicji programowania obiektowego. Nazwa samej techniki pochodzi od angielskiego słowa przeciążanie, nadmierne obciążenie lub przeładowanie, ma także kilka innych znaczeń. W polskiej literaturze tematu mówi się zazwyczaj o przeciążaniu lub przeładowaniu funkcji. overloading, oznaczającego
1. Przeciążanie funkcji 5 1.1. Wprowadzenie 5 1.2. Funkcja przeciążona 5 1.3. Elementy funkcji podlegające przeciążaniu 7 1.4. Dopasowywanie argumentów wywołania podczas przeciążania funkcji 10 1.5. Typy danych niepodlegające przeciążaniu 16 1.6. Wskaźniki do funkcji przeciążonych 24 2. Struktury, unie i pola bitowe 28 2.1. Wprowadzenie 28 2.2. Typ strukturalny i struktura 28 2.3. Inicjalizacja struktury 33 2.4. Dostęp do składników struktury 35 2.5. Unia 38 2.6. Unia anonimowa 40 2.7. Pole bitowe 42 3. Klasy i obiekty 44 3.1. Wprowadzenie 44 3.2. Defincja klasy 44 3.3. Definicja obiektu klasy 47 3.4. Składniki klasy 47 3.5. Dane składowe klasy 50 3.6. Funkcje składowe klasy 52 3.7. Składniki statyczne klasy 56 3.8. Obiekty oraz składniki klasy typu const i volatile. Modyfikator mutable 63 3.9. Zasłanianie nazw składników i przeciążanie funkcji składowych klasy 66 3.10. Obiekty klasy jako argumenty i wartości funkcji 70 4. Konstruktory i destruktory 74 4.1. Wprowadzenie 74 4.2. Definicja konstruktora 74 4.3. Definicja destruktora 77 4.4. Lista inicjalizacyjna konstruktora 81 4.5. Wywołanie konstruktora i destruktora 84 4.6. Przeciążanie konstruktora 87 4.7. Konstruktor domniemany 88 4.8. Konstruktor i destruktor klas z obiektami składowymi 89 4.9. Konstruktor kopiujący 91 5. Zaprzyjaźnianie funkcji i klas 97 5.1. Wprowadzenie 97 5.2. Funkcja zaprzyjaźniona 97 5.3. Klasa zaprzyjaźniona 104 6. Tablice obiektów 111 6.1. Wprowadzenie 111 6.2. Tablica obiektów będących agregatami 111 6.3. Tablica obiektów niebędących agregatami 118 6.4. Dynamiczna tablica obiektów definiowana operatorami new i delete 122 7. Wskaźniki do obiektów oraz składników klas 127 7.1. Wprowadzenie 127 7.2. Wskaźnik do danych określonego typu 127 7.3. Wskaźnik do obiektów 130 7.4. Wskaźnik do składników klasy 134 7.5. Tablica wskaźników do składników klasy 139 8. Konwersje typów danych 146 8.1. Wprowadzenie 146 8.2. Konwersje nieobiektowe 146 8.3. Konstruktor konwertujący 150 8.4. Funkcja konwertująca 158 8.5. Konwersje obiektowe niejawne i jawne 164 9. Przeciążanie operatorów 168 9.1. Wprowadzenie 168 9.2. Operator przeciążony 168 9.3. Funkcja operatorowa jako funkcja globalna 171 9.4. Funkcja operatorowa jako funkcja składowa klasy 175 10. Dziedziczenie składników klas 181 10.1. Wprowadzenie 181 10.2. Klasa podstawowa i pochodna 182 10.3. Dziedziczenie wielopokoleniowe 190 10.4. Dziedziczenie wieloklasowe 197 10.5. Konwersje standardowe klas podczas dziedziczenia 204 10.6. Klasa wirtualna 206 11. Polimorfizm i funkcje wirtualne 210 11.1. Wprowadzenie 210 11.2. Funkcja wirtualna 210 11.3. Klasa abstrakcyjna 219 12. Programowanie zorientowane obiektowo 222
|