| "Swap" baseclass of two similar Objects... [message #17398] |
Sun, 07 October 2007 12:05  |
clqrq Messages: 3 Registered: August 2007 |
Junior Member |
|
|
guess you have two classes (A and B) and you have two objects (C1 and
C2) of a class C that is defined as
class C: public A, public B
can I *somehow* swap B of C1 and B of C2? To make myself clearer:
class C1 and C2 both have some area in memory that holds their B-Part
- i guess there must be somewhere in class C1 and C2 a kind of pointer
to that baseclasses. Eg. if you do a (B*) this inside C1 you get it.
What i want to do is swap the pointers.
Is that somehow possible?
thx in advance, .rhavin;)
|
|
|
|
| Re: "Swap" baseclass of two similar Objects... [message #17400 is a reply to message #17399 ] |
Sun, 07 October 2007 12:53   |
alfps Messages: 315 Registered: July 2007 |
Senior Member |
|
|
* Markus Schoder:
> On Sun, 07 Oct 2007 09:05:40 -0700, .rhavin grobert wrote:
>> guess you have two classes (A and B) and you have two objects (C1 and
>> C2) of a class C that is defined as
>>
>> class C: public A, public B
>>
>> can I *somehow* swap B of C1 and B of C2? To make myself clearer: class
>> C1 and C2 both have some area in memory that holds their B-Part - i
>> guess there must be somewhere in class C1 and C2 a kind of pointer to
>> that baseclasses. Eg. if you do a (B*) this inside C1 you get it. What i
>> want to do is swap the pointers.
>>
>> Is that somehow possible?
>
> Most implementations will not hold pointers to the base class objects but
> instead aggregate them into one large object -- therefore it is not even
> theoretically possible to do what you want.
I think perhaps you misread what the OP wrote although it's not very
clear when he first refers to C1 as an object and then as a class; I'm
assuming C1 and C2 really are objects, of class C.
std::swap( *static_cast<B*>(C1), *static_cast<B*>(C2) );
should then do the trick.
But it's not a good idea.
Class C may impose constraints on its B subobject, that depends on the
additional information present, and so swapping may violate the
constraints present in C and break C's class invariant. It's basically
a slice operation. And slicing is Evil(TM) and should be avoided.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
|
|
|
|
| Re: "Swap" baseclass of two similar Objects... [message #17409 is a reply to message #17400 ] |
Sun, 07 October 2007 17:00   |
clqrq Messages: 3 Registered: August 2007 |
Junior Member |
|
|
On 7 Okt., 18:53, "Alf P. Steinbach" <al...@start.no> wrote:
> * Markus Schoder:
>
>
>
> > On Sun, 07 Oct 2007 09:05:40 -0700, .rhavin grobert wrote:
> >> guess you have two classes (A and B) and you have two objects (C1 and
> >> C2) of a class C that is defined as
>
> >> class C: public A, public B
>
> >> can I *somehow* swap B of C1 and B of C2? To make myself clearer: class
> >> C1 and C2 both have some area in memory that holds their B-Part - i
> >> guess there must be somewhere in class C1 and C2 a kind of pointer to
> >> that baseclasses. Eg. if you do a (B*) this inside C1 you get it. What i
> >> want to do is swap the pointers.
>
> >> Is that somehow possible?
>
> > Most implementations will not hold pointers to the base class objects but
> > instead aggregate them into one large object -- therefore it is not even
> > theoretically possible to do what you want.
>
> I think perhaps you misread what the OP wrote although it's not very
> clear when he first refers to C1 as an object and then as a class; I'm
> assuming C1 and C2 really are objects, of class C.
i meant class C: public A, B {...};
before:
C1 = [A1],[B1]
C2 = [A2],[B2]
after:
C1 = [A1],[B2]
C2 = [A2],[B1]
even if B has private stuff.
>
> std::swap( *static_cast<B*>(C1), *static_cast<B*>(C2) );
>
> should then do the trick.
>
> But it's not a good idea.
>
> Class C may impose constraints on its B subobject, that depends on the
> additional information present, and so swapping may violate the
> constraints present in C and break C's class invariant.
C and A are contolled by myself, so i should have a chance to correct
the odds;-)
> It's basically a slice operation. And slicing is Evil(TM) and should be avoided.
I want to be evil ;-)
>
> Cheers, & hth.,
>
> - Alf
>
> --
> A: Because it messes up the order in which people normally read text.
> Q: Why is it such a bad thing?
> A: Top-posting.
> Q: What is the most annoying thing on usenet and in e-mail?
|
|
|
| Re: "Swap" baseclass of two similar Objects... [message #17410 is a reply to message #17409 ] |
Sun, 07 October 2007 17:30  |
Gianni Mariani Messages: 153 Registered: July 2007 |
Senior Member |
|
|
..rhavin grobert wrote:
> On 7 Okt., 18:53, "Alf P. Steinbach" <al...@start.no> wrote:
....
>> It's basically a slice operation. And slicing is Evil(TM) and should be avoided.
>
> I want to be evil ;-)
I think Alf really meant to say masochistic.
|
|
|