struct to/from void, object to/from void
Era Scarecrow
rtcvb32 at yahoo.com
Sun Apr 29 22:25:45 PDT 2012
On Monday, 30 April 2012 at 05:07:04 UTC, Ali Çehreli wrote:
> You mean "object"? A class variable is just a handle to the
> class object. Class variables are implemented as pointers, so
> yes, they will be the size of a pointer. Since I suspect that
> the pointers are 4 bytes on the OP's 32-bit system, I don't see
> any fatness there. It is just a plain pointer.
I was thinking the 'string' which was a fat pointer, but likely
I misread it and assumed the size was referring to the object's
contents. 4bytes would be a single pointer, so my mistake on that
part.
> The object itself has some data that makes it behave like its
> actual type but I wouldn't be surprised if it contained a
> virtual function table pointer just like in C++. But note that
> the object, not the variable is fat in that sense.
But unlike in C++, it only incorporates it if you add 'virtual',
so the up and down casting can revert to it's previous version.
I've read about it more than used it so..
//c++ - not tested..
class Base {
void func() { stdout << "base!";}
}
bass Derived : Base {
virtual void func() {stdout << "derived (virtual)";}
}
void main(){
//use pointers? I can't remember...
Derived d = new Derived;
base b = (Base) d;
b.func(); //Logically should call the derived one, but since
there's no virtual table, we get the base's one instead!!
}
Inside the derived class it's a virtual call, change it back to
it's base and it loses that extra information. You may be able to
up/down cast, but it's a problem in C++. One more reason I don't
use C++ if I don't have to.
> Correction: It is actually an upcast, which does not require
> the explicit cast anyway.
I am getting up and down backwards. My bad..
> I find the following message more descriptive:
>
> assert(ba !is null, "a is not actually a BA?");
>
> To be more pedantic, 'a' is neither an A nor a BA. It is a
> variable that provides access to an object through the A
> interface.
More information about the Digitalmars-d-learn
mailing list