cs88rfj@unccvax.uncc.edu (Roger Johnson) (11/14/90)
I am new to c++, and am writing a graphical interface program which maintains
a linked list of shapes. In the code fragement below, I am type casting the
list pointers (normally (void *)) to (Shape *). I've looked at overloading
the '->' operator but the documentation I have is not very good. I want to
overload '->' in the class "Shape", so the '->' will be a pointer to t object
Shape. Any suggestions?
Class Declarations:
class List {
public:
void Add_cell (void *p, void *n) {
prev = p;
next = n;
};
virtual char *is_A (void) {};
protected:
void *Next (void) {
return (void *) this->next;
};
void Next (void *n) {
this->next = n;
};
void Previous (void *p) {
this->prev = p;
};
void *Previous (void) {
return (void *) this->prev;
};
private:
void *prev, *next;
};
class Shape : protected List {
public:
virtual int contains (int x, int y) {};
void check (int x, int y) {
Shape *temp;
temp = this;
while (temp) {
if (temp->contains(x,y)) {
if (temp->state)
printf ("%s: %c selected\n",temp->is_A(),temp->id);
else
printf ("%s: %c deselected\n",temp->is_A(),temp->id);
temp = NULL;
}
else
temp = (Shape *)temp->Previous();
};
};
Shape * del (void) {
int deleted = 0;
Shape *delptr, *temp = this;
while (temp) {
if (temp->state) {
if (temp->Previous())
((Shape *)temp->Previous())->Next(temp->Next());
if (temp->Next())
((Shape *)temp->Next())->Previous(temp->Previous());
else
this = (Shape *)this->Previous();
delptr = temp;
temp = (Shape *)temp->Previous();
delete delptr;
deleted = 1;
}
else
temp = (Shape *)temp->Previous();
}
if (deleted) {
printf ("The selected shape(s) have been deleted\n");
deleted = 0;
}
return this;
};
protected:
int level, state;
char id;
void add (char n) {
if (Previous())
level = ((Shape *) Previous())->level+1;
else
level = 0;
state = 0;
id = n;
printf ("The %s: %c has been added\n",this->is_A(),id);
};
int toggle (void) {
if (state)
state = 0;
else
state = 1;
return state;
};
};
Any replys can also be E-mailed to cs88rfj@unccvax.uncc.edu
Thanks in advance.
--Roger Johnson, :-( "Wish I could figure this one out!"