ADT in C style
struct ctr { int n; }
void ctr_init(ctr& c) { c.n = 0; }
void ctr_add(ctr& c, int i) { c.n = c.n + i; }
int ctr_val(ctr& c) { return c.n; }
Usage
ctr c; ctr_init(c); ctr_add(c,1);
ctr* p = new ctr; ctr_init(*p); ctr_add(*p);
slide: C++ -- objects (1)
The ctr type defined in slide [cc-objects-1] may be regarded as
a standard realization of abstract data types
in a procedural language.
It defines a data structure ctr,
an initialization function {\em ctr_init},
a function {\em ctr_add} to modify the value or state
of an element of the (abstract) type
and an observation function {\em ctr_val}
that informs us about its value.
We may either declare a ctr object or a pointer
to a ctr instance and invoke the functions as
indicated.
ADT in C++
class ctr {
public:
ctr() { n = 0; } constructor
~ctr() { cout << "bye"; }; destructor
void add( int i = 1) { n = n + i; }
int val( ) { return n; }
private:
int n;
};
Usage
ctr c; c.add(1); cout << c.val();
ctr* p = new ctr(); c->add(1); ...
slide: C++ -- objects (2)
In contrast, to define (the realization of) an abstract
data type in C++, we employ the class construct
and define member functions (or methods)
that operate on the data encapsulated by instances of the class.
See slide [cc-objects-2].