Download presentation
Presentation is loading. Please wait.
Published byLorraine James Modified over 9 years ago
1
Week 14 - Wednesday
2
What did we talk about last time? More C++ new delete Differences for structs OOP
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
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?
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!
24
STL Lab 14
25
Keep working on Project 6 Due next Friday
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.