Old problem with performance

Michel Fortin michel.fortin at michelf.com
Tue Feb 10 05:30:51 PST 2009


On 2009-02-10 08:02:31 -0500, Kagamin <spam at here.lot> said:

> 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?

Since you're passing c2 as a C by value to doSomething, slicing do 
occur and it prints "It's C." two times. That's why in C++ we generally 
pass objects by reference. Unfortunately, you often can't do that for 
return values..

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list