confusion involving pointer to pointer when converting from derived to base

K

Kavya

Since Circle is-a Shape we are allowed to do this

Circle *c = new Circle;
Shape *s = c; //Works

But we can't do this

Circle **cc = &c;
Shape **ss = cc; //Does not works

Similarly, we can convert a pointer to non-const to a pointer to const
but we may not convert a pointer to pointer to non-const to a pointer
to pointer to const:

char *s1 = 0;
const char *s2 = s1; // works.
char *a[MAX];
const char **ps = a; // Does not works

Can someone explain this?
 
G

Gianni Mariani

Kavya said:
Since Circle is-a Shape we are allowed to do this

Circle *c = new Circle;
Shape *s = c; //Works

But we can't do this

Circle **cc = &c;
Shape **ss = cc; //Does not works

If this were to work, you would be able to do this:

Circle *c = new Circle;
Tri *t = new Tri;

Circle **cc = &c;
Shape **ss = cc;
* ss = t;

c.radius = 22; // OOOPS - undefined behaviour

which is not very desirable.
Similarly, we can convert a pointer to non-const to a pointer to const
but we may not convert a pointer to pointer to non-const to a pointer
to pointer to const:

char *s1 = 0;
const char *s2 = s1; // works.
char *a[MAX];
const char **ps = a; // Does not works

Can someone explain this?

Same thing.

char *s1 = 0;
const char foo[] = "FOO";
const char **ps = &s1; // is not allowed
*ps = foo; // s1 now points to foo
s1[0]='B'; // assigning a const char - not good.
 
B

BobR

Kavya wrote in message...
Since Circle is-a Shape we are allowed to do this

Circle *c = new Circle;
Shape *s = c; //Works

But we can't do this

Circle **cc = &c;
Shape **ss = cc; //Does not works

Similarly, we can convert a pointer to non-const to a pointer to const
but we may not convert a pointer to pointer to non-const to a pointer
to pointer to const:

char *s1 = 0;
const char *s2 = s1; // works.
char *a[MAX];
const char **ps = a; // Does not works

Can someone explain this?

Yep!

Alf P. Steinbach's "Pointers" document:
http://home.no.net/dubjai/win32cpptut/special/pointers/ch_01.pdf

Read that, then come back if you need more help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top