Object-oriented Programming:

Object-oriented Programming:
In OOP we deal with classes of objects. A class of objects is an open-ended set of
objects that behave in a similar way. We call these objects instances of the class.
For example, we have a class Card, which represents cards in an ordinary deck of
playing cards. Each particular card is an object, which is an instance of the class
Stucts and classes are almost identical. The only difference is that in structs the
member functions and variables (and other members) are by default public,
whereas in classes they are by default private.
In both cases you can declare them to be either public or private explicitly.
C++ is an OOPL (obj-or. prog. lang.) built on top of the C language. One result of
this is that C++ has a lot of historical baggage that it has inherited from C (includes
structs, C-arrays, C-strings, etc.).
An important programming principle was developed around 1980:
The Information Hiding Principle:
The user of a module (e.g., a class) should have all the information required to use
that module correctly and nothing more.
The implementer of a module should have all the information required to implement
that module correctly and nothing more.
This is not about proprietary information, trade secrets, military secrets, or
anything like that. What it is about is what information can be used in what parts of
the program.
The user of a module might know all about its implementation, but can't make use
of that information in the parts of the program that use the module.
The implementer of a module might know all about how it will be used, but can't
make use of that information in the part of the program that implements the
This makes it very clear what the user and the implementer can depend on, and
what they should not depend on (because it might change). It's a kind of
"contract." The goal is to improve program maintenance.
We have been using classes that are good examples of this: vector, string,
iostream, cmath, ...
You (collectively, implementers and users) have to agree on what should be public
and what private.
Complex Numbers example:
Typically we write a complex number in the form x + yi, where i is the square root
of -1.
It's easier to add complex numbers in Cartesian form, and it's easier to multiply
them in polar form.
But it's the same complex number; it's just two different ways of writing it.
We have integers in C++ and we have doubles (real numbers) in C++. For scientific
and engineering applications it would also be useful to have complex numbers, but
they're not built into C++. However we can extend C++ by defining a complex
Suppose a = x + yi, and b = u + vi,
then a + b = (x + yi) + (u + vi) = (x + u) + (y + v)i
Suppse a = r e^(iu) and b = s ^(iv),
then ab = (rs) e^(i(u+v))