monday, feb 10, 2003kate gregory with material from deitel and deitel week 6 lab 2 is marked hand in...
TRANSCRIPT
![Page 1: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/1.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Week 6
• Lab 2 is marked
• Hand in Lab 3
• Questions from Last Week
• Operator Overloading
• Lab 4
![Page 2: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/2.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Date Week Topic ChapterHand Out Due Back Test
6-Jan-03 1Administrivia / Overview / Intro to C++ / Control Structures 1
13-Jan-03 2 Functions / Arrays, Pointers, Strings 2,3,4,5Lab 1 / Lab 2
20-Jan-03 3 Classes, Data Abstraction 6 Lab 1 5%27-Jan-03 4 More on Classes 7 Lab 3 Lab 2 5%3-Feb-03 5 No Lecture
10-Feb-03 6 Operator Overloading 8 Lab 4 Lab 3 5%17-Feb-03 Reading Break24-Feb-03 7 Inheritance 9 Lab 4 5% Midterm 25%3-Mar-03 8 Virtual Functions and Polymorphism 10 Lab 5
10-Mar-03 9 Stream IO 11 Lab 6 Lab 5 5%17-Mar-03 10 Templates 12,13 Lab 7 Lab 6 5%24-Mar-03 11 Exceptions31-Mar-03 12 File IO 14 Lab 7 5%
??? Exam Final 40%
Schedule
![Page 3: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/3.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Stack vs. Heap
• Allocate on the stack:
if (x > 0)
{
Rectangle r(3,4);
cout << r.area();
}• Object exists only while execution is between the
brace brackets
![Page 4: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/4.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Stack vs. Heap
• Allocate on the heap:if (x > 0){ Rectangle* pr = new Rectangle(3,4); cout << pr->area();}
• Object continues to exist until it is deleted• If you plan to save a pointer and use it elsewhere,
it must point to a location on the heap
![Page 5: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/5.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Gets and Sets
class BankAccount{private: int balance; //in penniespublic: int getbalance() {return balance;} void setbalance(int bal) {balance = bal;}// other stuff};
![Page 6: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/6.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Encapsulation to the Rescueclass BankAccount{private: float dollarbalance; //in dollarspublic: int getbalance() {return (int) (dollarbalance*100);} void setbalance(int bal) {dollarbalance = bal/100.0;}// other stuff};
![Page 7: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/7.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Overloading Revisited
• When a two functions have the same name, they are overloaded
class foo
{
public:
int something(int x);
int something();
};
![Page 8: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/8.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overloading
• All languages have operator overloading
int x = 1 + 1;
float f = 1.0 + 1.0;
• Usually, the compiler is the only one who “gets to play”
![Page 9: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/9.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overloading
• How do you compare two objects?
Date d1, d2;
// they get values somehow
if (d1.equals(d2))
{
// something
}
![Page 10: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/10.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overloading
• Wouldn’t this be nicer?
Date d1, d2;
// they get values somehow
if (d1 == d2)
{
// something
}
![Page 11: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/11.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overloading
• How about this?
Date d1, d2;
// they get values somehow
if (d1 != d2)
{
d1 = d2 + 3;
}
![Page 12: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/12.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
How do you overload an operator?
• You write a function• The name is operator followed by the symbol
operator+
operator==
![Page 13: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/13.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Where does the function go?
• For binary operators:
class A, B;
A a;
B b;
// give them values somehow
int x = a + b;
![Page 14: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/14.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overload as Member Function
// in A.hclass A{// whatever else it hasint operator+(B b);};
// in A.cppint A::operator+(B b){ // something}
![Page 15: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/15.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overload as Global Function
// not in any class
int operator+(A a, B b);
• Typically the declaration is in the header file for A and the implementation is in the implementation file for A
![Page 16: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/16.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overload as Global Function
// in A.hclass A{// whatever else it has};int operator+(A a, B b);
// in A.cppint operator+(A a, B b){ // something}
![Page 17: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/17.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Your class isn’t always on the left
class A;
A a;
int x = A + 2;
int y = 2 + A;
• What functions does the compiler look for?
![Page 18: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/18.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Your class on the left
int x = A + 2;
• A::operator+(int i)
• operator+(A a, int i)
• The choice is yours
![Page 19: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/19.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Your class on the right
int x = 2 + A;
• int::operator+(A a) – Not possible!
• operator+(int i, A a)– Your only choice
![Page 20: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/20.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Coding a Global Operator
• Sometimes it’s easy:class A{private: int x;public: int operator+(int arg);//other stuff};int operator+(int arg, A a);
![Page 21: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/21.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Coding a Global Operator
• Here’s a neat trick
int A::operator+(int arg);
{
return x + arg;
}
int operator+(int arg, A a);
{
return a + arg;
}
![Page 22: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/22.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Coding a Global Operator
• Sometimes the operator is not reversible like that • The global function will need access to private
member variables of the class it works with• It needs to be an honourary member of the class
– friend
![Page 23: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/23.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Where does the function go?
• For unary operators:
class U;
U u1, u2;
// give them values somehow
u2 = !u1;
![Page 24: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/24.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overload as Member Function
// in U.hclass U{// whatever else it hasU operator!();};
// in U.cppU U::operator+(){ // something}
![Page 25: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/25.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Overload as Global Function
// in U.hclass U{// whatever else it has};U operator!(U u);
// in U.cppU operator!(U u){ // something}
![Page 26: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/26.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
What can you overload?
• Binary
+ - * / %
+= -= *= /= %=
++ -- (pre and post)
^ & |
> < >= <= == !=
[]
![Page 27: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/27.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
What can you overload?
• Unary
+ -
!
• Some other scary ones eg &
![Page 28: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/28.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Consistency
• Operator+ should do something that feels like adding– Matrix add, complex number add
– Container (list, queue) add an element
– String concatenate
– Increase date
• Don’t mess with people’s heads
![Page 29: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/29.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Operator Consistency
• If you have defined similar operators, they should work the same way.
• These three expressions should all have the same result:
A a;
a = a + 1;
a += 1;
a++;
![Page 30: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/30.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Tip
• Use one operator to implement the others:
bool A::operator==(const A& arg)
{ // whatever
}
bool A::operator!=(const A& arg)
{
return !(*this == arg);
}
![Page 31: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/31.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
More Rules
• You can’t change the order of operations
• You can’t invent new operators, including unary versions of binary-only operators such as /.
• You can’t overload operators that work on only fundamental types:int operator+(int i, int j)
![Page 32: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/32.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Overloading <<
cout << “my number is “ << 3 << endl;Employee e;cout << e << endl;
• Compiler is looking for
ostream& operator<<(ostream& o, Employee e)
• Typically the code is just like a display() function• Return the ostream& that was passed
![Page 33: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/33.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Simple Array Class
• Implement an Array class with – Range checking
– Array assignment
– Arrays that know their size
– Outputting entire arrays with <<
– Array comparisons with == and !=– Element access with []
![Page 34: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/34.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
array.hclass Array { friend ostream& operator<<( ostream& o, const Array& a);public: Array( int size = 10 ); Array( const Array& a); //copy constructor ~Array(); int getSize() const { return size; } const Array& operator=( const Array& a); bool operator==( const Array& a) const; bool operator!=( const Array& right ) const { return !( *this == right ); } int& operator[]( int ); const int& operator[]( int ) const; private: int size; int* ptr; // pointer to actual content};
![Page 35: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/35.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Using the Array class
int main(){ Array integers1(7), integers2; cout << "integers1:" << integers1 << endl; cout << "integers2:" << integers2 << endl; integers1[5] = 1000; cout << integers1[5] << endl; if ( integers1 == integers2 ) cout << "They are equal\n\n"; else cout << "They are not equal\n"; return 0;}
![Page 36: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/36.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array - constructor
Array::Array( int arraySize )
{
size = ( arraySize > 0 ?
arraySize : 10 );
ptr = new int[ size ];
for ( int i = 0; i < size; i++ )
ptr[ i ] = 0;
}
![Page 37: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/37.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array - destructor
Array::~Array()
{
delete [] ptr;
}
• Whenever your destructor does something destructive, you must code a copy constructor and an assignment operator
![Page 38: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/38.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Destructive Destructors
• Not all classes have a destructor that actually cleans up– Free memory– Close file– Release lock or database connection or ...
• When the destructor cleans up you need to be sure it will never go off accidentally
![Page 39: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/39.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Shallow and Deep Copies
• An object holds a resource (pointer to memory, name of file, pointer to connection object)
• If you copy the object bit-for-bit, now two objects hold the same pointer (or handle or name or whatever)
• When one goes out of scope, the destructor cleans up– The other has a pointer to nowhere!
![Page 40: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/40.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array – copy constructor
Array::Array( const Array& init ) : size( init.size ), ptr(new int[init.size])
{
for ( int i = 0; i < size; i++ )
ptr[i] = init.ptr[i];
}
![Page 41: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/41.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Copy Constructor takes a reference
• Imagine this code:
Array a2(a1);• This uses the copy constructor to construct a2• Takes by value: need to make a copy of a1 to pass
to the function– Use the copy constructor.
– But that takes by value, so need to make a copy• Use the copy constructor
• . . .
![Page 42: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/42.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array – assignment operator
const Array& Array::operator=( const Array right ){ // always check for self-assignment if ( &right != this ) { if ( size != right.size ) { delete [] ptr; size = right.size; ptr = new int[ size ]; } for ( int i = 0; i < size; i++ ) ptr[ i ] = right.ptr[ i ]; } return *this; // enables x = y = z;}
![Page 43: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/43.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Copy Constructor vs Assignment operator
• It’s not about whether the = operator is used• It’s about whether something is being constructed
Array a1(10);
Array a2(a1);
Array a3 = a2;
a1 = a3;
![Page 44: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/44.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array – equality testbool Array::operator==( const Array& right )
const{ if ( size != right.size ) return false; // arrays of different
sizes
for ( int i = 0; i < size; i++ ) if ( ptr[ i ] != right.ptr[ i ] ) return false; // arrays are not equal
return true; // arrays are equal}
![Page 45: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/45.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array – element accessint& Array::operator[]( int subscript )
{
if( subscript >= 0 && subscript < size );
return ptr[ subscript ];
else
// should throw exception or something
exit(1);
}
• Why does it return a reference?
integers1[5] = 1000;
![Page 46: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/46.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Arrayconst int& Array::operator[]( int subscript )
const{ if( subscript >= 0 && subscript < size ); return ptr[ subscript ]; // const reference else // should throw exception or something exit(1);}
• For use with const arrays (since it’s const)• Guarantees the object will stay const by not providing a reference to
the inside, which could be changed.
![Page 47: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/47.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing Array
ostream& operator<<( ostream& output, const Array& a )
{
int i;
for ( i = 0; i < a.size; i++ )
{
output << a.ptr[i] << endl;
}
return output; //enables cout << x << y;
}
![Page 48: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/48.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
Remember The Requirements
• Implement an Array class with – Range checking
– Array assignment
– Arrays that know their size
– Outputting entire arrays with <<
– Array comparisons with == and !=– Element access with []
![Page 49: Monday, Feb 10, 2003Kate Gregory with material from Deitel and Deitel Week 6 Lab 2 is marked Hand in Lab 3 Questions from Last Week Operator Overloading](https://reader035.vdocuments.us/reader035/viewer/2022070411/56649cae5503460f94971943/html5/thumbnails/49.jpg)
Monday, Feb 10, 2003 Kate Gregorywith material from Deitel and Deitel
For Next class
• Enjoy Reading Week – see you Feb 24• Read chapter 9• Do Lab 4• Study for Midterm
– Feb 24, class time, this room– Will cover everything till today– You may be asked to write code in handwriting– One hour, closed book– Worth 25%