It is perfectly valid to create pointers that point to classes. We
simply have to consider that once declared, a class becomes a valid
type, so we can use the class name as the type for the pointer. For
example:
is a pointer to an object of class
CRectangle.
As it happened with data structures, in order to refer directly to a
member of an object pointed by a pointer we can use the arrow operator (
->) of indirection. Here is an example with some possible combinations:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// pointer to classes example
#include
using namespace std;
class CRectangle {
int width, height;
public:
void set_values (int, int);
int area (void) {return (width * height);}
};
void CRectangle::set_values (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle a, *b, *c;
CRectangle * d = new CRectangle[2];
b= new CRectangle;
c= &a;
a.set_values (1,2);
b->set_values (3,4);
d->set_values (5,6);
d[1].set_values (7,8);
cout << "a area: " << a.area() << endl;
cout << "*b area: " << b->area() << endl;
cout << "*c area: " << c->area() << endl;
cout << "d[0] area: " << d[0].area() << endl;
cout << "d[1] area: " << d[1].area() << endl;
delete[] d;
delete b;
return 0;
}
|
a area: 2
*b area: 12
*c area: 2
d[0] area: 30
d[1] area: 56
|
Next you have a summary on how can you read some pointer and class operators (
*,
&,
.,
->,
[ ]) that appear in the previous example:
expression | can be read as |
*x | pointed by x |
&x | address of x |
x.y | member y of object x |
x->y | member y of object pointed by x |
(*x).y | member y of object pointed by x (equivalent to the previous one) |
x[0] | first object pointed by x |
x[1] | second object pointed by x |
x[n] | (n+1)th object pointed by x |
Be sure that you understand the logic under all of these expressions
before proceeding with the next sections. If you have doubts, read again
this section and/or consult the previous sections about pointers and
data structures.
Comments
Post a Comment
https://gengwg.blogspot.com/