468,167 Members | 1,959 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,167 developers. It's quick & easy.

Can someone explain this code?

Wondering how this code worked

I have a base class called eg MyBase. It has a private member called
myprivatemember which is of course not accessible from users of the
class.

But I suddenly need to update the variable myprivate and I am not
allowed to edit the original source code so I create a new class,
MyNewToAllowChange which implements a public function called
SetMyPrivate which allows me to change the variable.

I realise this is bad design etc but just bear with me.

I don't implement operator= (or assign) and in my code I have an
instance of the base object - MyBase.

I need to update the myprivatemember and so the following functions
have been provided which make it possible.

inline MyNewToAllowChange* Mt(MyBase* thebase)
{
return static_cast<MyNewToAllowChange*>(thebase);
}

I can then do this sort of thing:

(if my base object is called mybaseobj (a pointer))
Mt(mybaseobj)->SetMyPrivate(whatever);

MyBase
MyNewToAllowChange

How is this working? Is it a fairly standard technique?

I can see that it is useful in certain circumstances, just not see
before.
Jun 27 '08 #1
3 954
Angus wrote:
How is this working? Is it a fairly standard technique?
As far as I can tell...

You've not provided enough information to answer that question. It's a
mystery.
Jun 27 '08 #2
On 2008-06-23 17:47, Angus wrote:
Wondering how this code worked

I have a base class called eg MyBase. It has a private member called
myprivatemember which is of course not accessible from users of the
class.

But I suddenly need to update the variable myprivate and I am not
allowed to edit the original source code so I create a new class,
MyNewToAllowChange which implements a public function called
SetMyPrivate which allows me to change the variable.

I realise this is bad design etc but just bear with me.

I don't implement operator= (or assign) and in my code I have an
instance of the base object - MyBase.

I need to update the myprivatemember and so the following functions
have been provided which make it possible.

inline MyNewToAllowChange* Mt(MyBase* thebase)
{
return static_cast<MyNewToAllowChange*>(thebase);
}

I can then do this sort of thing:

(if my base object is called mybaseobj (a pointer))
Mt(mybaseobj)->SetMyPrivate(whatever);

MyBase
MyNewToAllowChange

How is this working?
By praying to the gods, sacrificing virgins at full moon, and a few
other tricks.

At the very least you should used reinterpret_cast since static_cast is
not allowed to do that conversion, and even if you did the result of the
conversion is implementation defined. In short, while it might work for
you now, if you try it on another platform and/or with another compiler
you might be in for a surprise.

--
Erik Wikström
Jun 27 '08 #3
Angus wrote:
...
I have a base class called eg MyBase. It has a private member called
myprivatemember which is of course not accessible from users of the
class.

But I suddenly need to update the variable myprivate and I am not
allowed to edit the original source code so I create a new class,
MyNewToAllowChange which implements a public function called
SetMyPrivate which allows me to change the variable.
Er... How??? If the member variable is indeed private and the class has
no "friends", there's no way to gain access to it, regardless of how
many "new" classes you introduce.
How is this working? Is it a fairly standard technique?
Sorry, so far you haven't demonstrated any technique at all. Explain
more clearly what "technique" exactly you are talking about.

--
Best regards,
Andrey Tarasevich
Jun 27 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

11 posts views Thread by Maciej Nadolski | last post: by
21 posts views Thread by Gactimus | last post: by
3 posts views Thread by MarcJessome | last post: by
5 posts views Thread by J Allen Horner | last post: by
1 post views Thread by Tran Hong Quang | last post: by
6 posts views Thread by Dave Young | last post: by
1 post views Thread by gcdp | last post: by
reply views Thread by kamranasdasdas | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.