diff --git a/lectures/14_operators/README.md b/lectures/13_operators/README.md similarity index 94% rename from lectures/14_operators/README.md rename to lectures/13_operators/README.md index 6d6786d..22ea040 100644 --- a/lectures/14_operators/README.md +++ b/lectures/13_operators/README.md @@ -1,10 +1,8 @@ -# Announcements - -# Lecture 14 --- Operators & Friends +# Lecture 13 --- Operators & Friends - Operators as non-member functions, as member functions, and as friend functions. -## 14.1 Complex Numbers — A Brief Review +## 13.1 Complex Numbers — A Brief Review - Complex numbers take the form z = a + bi, where i = √−1 and a and b are real. a is called the real part, b is called the imaginary part. - If w = c + di, then @@ -13,7 +11,7 @@ – w × z = (ac − bd) + (ad + bc)i - The magnitude of a complex number is √a2 + b2; -## 14.2 Complex Class declaration ([complex.h](complex.h)) +## 13.2 Complex Class declaration ([complex.h](complex.h)) ```cpp class Complex { @@ -36,7 +34,7 @@ Complex operator- (Complex const& left, Complex const& right); // non-member fun ostream& operator<< (ostream& ostr, Complex const& c); // non-member function ``` -## 14.3 Implementation of Complex Class ([complex.cpp](complex.cpp)) +## 13.3 Implementation of Complex Class ([complex.cpp](complex.cpp)) ```cpp // Assignment operator @@ -72,7 +70,7 @@ ostream& operator<< (ostream & ostr, Complex const& c) { } ``` -## 14.4 Operators as Non-Member Functions and as Member Functions +## 13.4 Operators as Non-Member Functions and as Member Functions - We have already written our own operators, especially **operator<**, to sort objects stored in STL containers. - We can write them as non-member functions (e.g., **operator-**). When implemented as a non-member function, @@ -91,7 +89,7 @@ Observe that the function has **only on**e argument! objects. Calling constructors for **Complex** objects inside functions, especially member functions that work on **Complex** objects, seems somewhat counter-intuitive at first, but it is common practice! -## 14.5 Assignment Operators +## 13.5 Assignment Operators - The assignment operator: **z1 = z2**; becomes a function call: **z1.operator=(z2)**; And cascaded assignments like: **z1 = z2 = z3**; are really: **z1 = (z2 = z3)**; @@ -104,7 +102,7 @@ The identifier this is reserved as a pointer inside class scope to the object wh Therefore, ***this** is a a reference to this object. - The fact that **operator=** returns a reference allows us to write code of the form: **(z1 = z2).real();** -## 14.6 Exercise +## 13.6 Exercise Write an operator+= as a member function of the Complex class. To do so, you must combine what you learned about operator= and operator+. In particular, the new operator must return a reference, *this. @@ -112,7 +110,7 @@ about operator= and operator+. In particular, the new operator must return a ref -## 14.7 Returning Objects vs. Returning References to Objects +## 13.7 Returning Objects vs. Returning References to Objects - In the operator+ and operator- functions we create new Complex objects and simply return the new object. The return types of these operators are both Complex. @@ -128,7 +126,7 @@ This avoids creation of a new object. created object! This results in someone having a pointer to stale memory. The pointer may behave correctly for a short while... until the memory under the pointer is allocated and used by someone else. -## 14.8 Friend Classes vs. Friend Functions +## 13.8 Friend Classes vs. Friend Functions - In the example below, the Foo class has designated the Bar to be a friend. This must be done in the public area of the declaration of Foo. @@ -146,7 +144,7 @@ contents) rather than Bar claiming it. What could go wrong if we allowed friends grants these functions access similar to that of a member function. The most common example of this is operators, and especially stream operators. -## 14.9 Stream Operators as Friend Functions +## 13.9 Stream Operators as Friend Functions - The operators >> and << are defined for the Complex class. These are binary operators. The compiler translates: cout << z3 into: operator<< (cout, z3) @@ -159,7 +157,7 @@ function of the Complex class. This is why stream operators are never member fun - Stream operators are either ordinary non-member functions (if the operators can do their work through the public class interface) or friend functions (if they need non public access). -## 14.10 Summary of Operator Overloading in C++ +## 13.10 Summary of Operator Overloading in C++ - Unary operators that can be overloaded: + - * & ~ ! ++ -- -> ->* - Binary operators that can be overloaded: + - * / % ^ & | << >> += -= *= /= %= ^= @@ -176,7 +174,7 @@ operators in this order: meaning of an operator. The whole point of operators is lost if you do. One (bad) example would be defining the increment operator on a Complex number. -## 14.11 Extra Practice +## 13.11 Extra Practice - Implement the following operators for the Complex class (or explain why they cannot or should not be implemented). Think about whether they should be non-member, member, or friend. diff --git a/lectures/14_operators/complex.cpp b/lectures/13_operators/complex.cpp similarity index 100% rename from lectures/14_operators/complex.cpp rename to lectures/13_operators/complex.cpp diff --git a/lectures/14_operators/complex.h b/lectures/13_operators/complex.h similarity index 100% rename from lectures/14_operators/complex.h rename to lectures/13_operators/complex.h