Advanced C++ Topics
- Inheritance
- Virtual methods and late binding
- Friend classes and methods
- Class templates
- Overloaded operators
- Iterators
EECS 268 Programming II 1
Advanced C++ Topics Inheritance Virtual methods and late binding - - PowerPoint PPT Presentation
Advanced C++ Topics Inheritance Virtual methods and late binding Friend classes and methods Class templates Overloaded operators Iterators EECS 268 Programming II 1 Inheritance Revisited Inheritance is useful to
EECS 268 Programming II 1
destructors
2
EECS 268 Programming II 3
EECS 268 Programming II 4
EECS 268 Programming II 5
EECS 268 Programming II 6
EECS 268 Programming II 7
8
Figure 8-1 Inheritance: Relationships among timepieces
9
EECS 268 Programming II 10
11
void displayDiameter(Sphere thing);
Ball myBall(5.0, “Volleyball”); displayDiameter(myBall);
EECS 268 Programming II 12
see C8-Sphere.cpp, C8-Ball.cpp
EECS 268 Programming II 13
EECS 268 Programming II 14
class Pen { … private: Ball point; };
EECS 268 Programming II 15
methods
descendants of the stack
EECS 268 Programming II 16
EECS 268 Programming II 17
see C8-StackL.cpp, C8-List.cpp
EECS 268 Programming II 18
EECS 268 Programming II 19
EECS 268 Programming II 20
EECS 268 Programming II 21
class Animal { public: ... virtual void breathe( ); // uses a nose virtual void move(); // uses feet ... }; class Fish: public Animal { public: ... void breathe( ); // uses gills virtual void move(); // uses fins ... } class WalkingCatFish: public Fish { void move(); // uses fins as feet }
EECS 268 Programming II 22
EECS 268 Programming II 23
see C8-staticBinding.cpp
EECS 268 Programming II 24
EECS 268 Programming II 25
see C8-bindingTime.cpp
EECS 268 Programming II 26
EECS 268 Programming II 27
EECS 268 Programming II 28
EECS 268 Programming II 29
EECS 268 Programming II 30
EECS 268 Programming II 31
32 EECS 268 Programming II
EECS 268 Programming II 33
template <typename T> class NewClass { public: NewClass(); NewClass(T initialData); void setData(T newData); T getData(); private: T theData; };
EECS 268 Programming II 34
int main() { NewClass<int> first; NewClass<double> second(4.8); first.setData(5); cout << second.getData() << endl; }
EECS 268 Programming II 35
template <typename T> void NewClass<T>::setData(T newData){ theData = newData; } template <typename T> T NewClass<T>::getData() { return theData; }
template <typename T> NewClass<T>::NewClass() { } template <typename T> NewClass<T>::NewClass (T initialData): theData(initialData) { } see C8-templareEx1.cpp
EECS 268 Programming II 36
see C8-ListT.cpp
EECS 268 Programming II 37
see C8-ListTClient.cpp
EECS 268 Programming II 38
EECS 268 Programming II 39
EECS 268 Programming II 40
EECS 268 Programming II 41
Operation Description * Return the item that the iterator currently references ++ Move the iterator to the next item in the list
== Compare two iterators for equality != Compare two iterators for inequality
42
// List and ListIterator are friend classes of ListNode #include “ListNode.h” class ListIterator { public: ListIterator(const List *aList, ListNode *nodePtr); const ListItemType & operator*(); ListIterator operator++(); bool operator==(const ListIterator& rhs) const; bool operator!=(const ListIterator& rhs) const; friend class List; private: const List *container //ADT associated with iterator ListNode *cur; //current location in collection };
43 EECS 268 Programming II
EECS 268 Programming II 44