|

You
accessed data members and functions by using the
dot (.) operator for Cat objects created locally.
To access the Cat object on the free store, you
must dereference the pointer and call the dot operator
on the object pointed to by the pointer. Therefore,
to access the GetAge member function, you would
write
(*pRags).GetAge();
Parentheses
are used to assure that pRags is dereferenced before
GetAge() is accessed.
Because
this is cumbersome, C++ provides a shorthand operator
for indirect access: the points-to operator (->),
which is created by typing the dash (-) immediately
followed by the greater-than symbol (>). C++
treats this as a single symbol. Listing 8.6 demonstrates
accessing member variables and functions of objects
created on the free store.
Listing
8.6. Accessing member data of objects on the
free store.
1:
// Listing 8.6
2:
// Accessing data members of objects on the heap
3:
4:
#include <iostream.h>
5:
6:
class SimpleCat
7:
{
8:
public:
9:
SimpleCat() {itsAge = 2; }
10:
~SimpleCat() {}
11:
int GetAge() const { return itsAge; }
12:
void SetAge(int age) { itsAge = age; }
13:
private:
14:
int itsAge;
15:
};
16:
17:
int main()
18:
{
19:
SimpleCat * Frisky = new SimpleCat;
20:
cout << "Frisky is " << Frisky->GetAge()
<< " years old\n";
21:
Frisky->SetAge(5);
22:
cout << "Frisky is " << Frisky->GetAge()
<< " years old\n";
23:
delete Frisky;
24:
return 0;
25:
}
Output:
Frisky is 2 years old
Frisky is 5 years old
Analysis: In line 19, a SimpleCat object
is instantiated on the free store. The default constructor
sets its age to 2, and the GetAge() method is called
in line 20. Because this is a pointer, the indirection
operator (->) is used to access the member data
and functions. In line 21, the SetAge() method is
called, and GetAge() is accessed again in line 22.
|