Weed Wrote:

> >>>>> Well, D class code here is not equivalent to C++ class code. D code has 
> >>>>> more features, namely, it's polymorphic: C.opAdd is able to work with 
> >>>>> classes, derived from C, while corresponding C++ code is unable to do 
> >>>>> so.
> > In C++ you can't pass object derived from C to opAdd method. In D you can.
> 
> I am do not agree with you:
> 
> // C++:
> class C {
>     public:
>         virtual void doSomething( C src ) {}
> };
> 
> class C2 : public C {
> };
> 
> int main( int argc, char* argv[] ) {
>     C c;
>     C2 c2;
> 
>     c.doSomething( c2 );
> 
>     return 0;
> }

Well, you can pass descendant objects :) I was surprised by this destructive 
feature. But code is still not polymorphic. Consider the following code:

class C
{
    public:
        virtual char* doSomething( C src )
                {
                        return src.Method();
                }
        virtual char* Method()
                {
                        return "It's C.";
                }
};

class C2 : public C
{
    public:
        virtual char* Method()
                {
                        return "It's C2.";
                }
};

int main(void)
{
    C c;
    C2 c2;
    printf("%s\n",c.doSomething(c));
    printf("%s\n",c.doSomething(c2));
    return 0;
}

What do you think is its output?

Reply via email to