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