Why can't structs be derived from?

Steven Schveighoffer schveiguy at yahoo.com
Wed Mar 16 14:05:49 PDT 2011


On Wed, 16 Mar 2011 16:49:53 -0400, Simen kjaeraas
<simen.kjaras at gmail.com> wrote:

> On Wed, 16 Mar 2011 16:23:47 +0100, Steven Schveighoffer  
> <schveiguy at yahoo.com> wrote:
>
>> struct Point2 {
>>     int x, y;
>>     void draw(Canvas c) {...}
>> }
>>
>> struct Point3 : Point2 {
>>     int z;
>>     void draw(Canvas c) {...}
>> }
>>
>> Point3 p3;
>> Point2 *p2 = &p3;
>>
>> // what does this do?
>> p2.draw(c);
>
> Nothing. You should got a type error upon attempting to assign a p3* to  
> a p2*.

We are assuming struct inheritance works here, as in C++.  In C++ I can  
the address of a derived object to a base class pointer without a cast.

This exact code compiles in C++ except for putting semi-colons after the  
structs (BTW, I have to mention that I freaking LOVE D for eliminating  
that) and change p2.draw(c) to p2->draw(c).

Even if you say that you shouldn't be allowed to do that, then you are  
going to have complaints as to why it's different from C++...

The point is, if we allow inheritance on structs, it causes more confusion  
to people who expect certain things from inheritance than it beautifies  
syntax.

-Steve


More information about the Digitalmars-d mailing list