Now
that you’ve seen an initial example, it’s time to step back and
take a look at some terminology. The act of bringing functions inside
structures is the root of the changes in C++, and it introduces a new way of
thinking about structures as concepts. In C, a structure is
an agglomeration of data, a way to package data so you can treat it in a clump.
But it’s hard to think about it as anything but a programming
convenience. The functions that operate on those structures are elsewhere.
However, with functions in the package, the structure becomes a new creature,
capable of describing both characteristics (like a C
struct
could)
and
behaviors. The concept of an object, a free-standing, bounded entity that can
remember
and
act, suggests itself.
The
terms “object”
and “object-oriented programming”
(OOP) are not new. The first OOP language was Simula-67,
created in Scandinavia in 1967 to aid in solving modeling problems.
These problems always seemed to involve a bunch of identical entities (like
people, bacteria, and cars) running around interacting with each other. Simula
allowed you to create a general description for an entity that described its
characteristics and behaviors and then make a whole bunch of them. In Simula,
the “general description” is called a
class(a
term you’ll see in a later chapter), and the mass-produced item that you
stamp out from a class is called an
object.
In C++, an object is just a variable, and the purest definition is “a
region of storage.” It’s a place where you can store data, and
it’s implied that there are also operations that can be performed on this
data.
Unfortunately
there’s not complete consistency across languages when it comes to these
terms, although they are fairly well-accepted. You will also sometimes
encounter disagreement about what an object-oriented language is, although that
seems to be fairly well sorted out by now. There are languages that are
object-based,
which means they have objects like the C++ structures-with-functions that
you’ve seen so far. This, however, is only part of the picture when it
comes to an object-oriented language, and languages that stop at packaging
functions inside data structures are object-based, not object-oriented.