Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 14 - Wednesday.  What did we talk about last time?  More C++  new  delete  Differences for structs  OOP.

Similar presentations


Presentation on theme: "Week 14 - Wednesday.  What did we talk about last time?  More C++  new  delete  Differences for structs  OOP."— Presentation transcript:

1 Week 14 - Wednesday

2  What did we talk about last time?  More C++  new  delete  Differences for structs  OOP

3

4

5 If you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor, and when was the last time you needed one? Tom Cargill If you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor, and when was the last time you needed one? Tom Cargill

6

7  In industrial strength C++ code, the class declaration is usually put in a header file (.h ) while the class definition is in an implementation file (.cpp )  Benefits:  Easy to see members and methods  Header files can be sent to clients without divulging class internals  Separate compilation (faster)  Easier to take care of circular dependencies

8 class Complex { double real; double imaginary; public: Complex(double realValue = 0, double imaginaryValue = 0); ~Complex(void); double getReal(); double getImaginary(); }; class Complex { double real; double imaginary; public: Complex(double realValue = 0, double imaginaryValue = 0); ~Complex(void); double getReal(); double getImaginary(); };

9 Complex::Complex(double realValue, double imaginaryValue) { real = realValue; imaginary = imaginaryValue; } Complex::~Complex(void) {} double Complex::getReal() {return real; } double Complex::getImaginary() {return imaginary; } Complex::Complex(double realValue, double imaginaryValue) { real = realValue; imaginary = imaginaryValue; } Complex::~Complex(void) {} double Complex::getReal() {return real; } double Complex::getImaginary() {return imaginary; }

10  In C++, you can overload operators, meaning that you can define what + means when used with classes you design  Thus, the following could be legal: Hippopotamus hippo; Sandwich club; Vampire dracula = club + hippo; Hippopotamus hippo; Sandwich club; Vampire dracula = club + hippo;

11  But, what does it mean to "add" a Hippopotamus to a Sandwich and get a Vampire ?  Overloading operators is a bad idea  You can get confusing code  Most languages don't allow it  It C++ it is useful in two cases:  To make your objects easy to input/output using iostream  To perform mathematical operations with numerical classes (like Complex !)

12 Complex& operator=( const Complex& complex ); Complex operator+( const Complex& complex ) const; Complex operator-( const Complex& complex ) const; Complex operator-() const; Complex operator*( const Complex& complex ) const; Complex& operator=( const Complex& complex ); Complex operator+( const Complex& complex ) const; Complex operator-( const Complex& complex ) const; Complex operator-() const; Complex operator*( const Complex& complex ) const;

13 Complex& Complex::operator= ( const Complex& complex ) { real = complex.real; imaginary = complex.imaginary; return *this; } Complex& Complex::operator= ( const Complex& complex ) { real = complex.real; imaginary = complex.imaginary; return *this; }

14  Let's finish the Complex type  Then, we can ask the user to enter two complex numbers  We can do the appropriate operation with them

15  const, of course, means constant in C++  In class methods, you'll see several different usages  Const methods make a guarantee that they will not change the members of the object they are called on  int countCabbages() const;  Methods can take const arguments  void insert(const Coin money);  Methods can take const reference arguments  void photograph(const Castle& fortress);  Why take a const reference when references are used to change arguments?

16

17  Allow classes and functions to be written with a generic type or value parameter, then instantiated later  Each necessary instantiation is generated at compile time  Appears to function like generics in Java, but works very differently under the covers  Most of the time you will use templates, not create them

18 template void exchange(T& a, T& b ) { T temp = a; a = b; b = temp; } template void exchange(T& a, T& b ) { T temp = a; a = b; b = temp; }

19  You can make a class using templates  The most common use for these is for container classes  e.g. you want a list class that can be a list of anything  The STL filled with such templates  Unfortunately, template classes must be implemented entirely in the header file  C++ allows template classes to be separate from their headers, but no major compiler fully supports it

20 template class Pair { private: T x; T y; public: Pair( const T& a, const T& b ) { x = a; y = b; } T getX() const { return x; } T getY() const { return y; } void swap() { T temp = x; x = y; y = temp; } }; template class Pair { private: T x; T y; public: Pair( const T& a, const T& b ) { x = a; y = b; } T getX() const { return x; } T getY() const { return y; } void swap() { T temp = x; x = y; y = temp; } };

21  Let's write an ArrayList class with templates!

22

23

24  STL  Lab 14

25  Keep working on Project 6  Due next Friday


Download ppt "Week 14 - Wednesday.  What did we talk about last time?  More C++  new  delete  Differences for structs  OOP."

Similar presentations


Ads by Google