传递给接受基类的函数的变量是否仍保留其派生类最多?

mch*_*hen 1 c++ inheritance class function

例如,考虑:

class Deriv : public Base {...};
...
bar(Deriv d);
bar(Base b);
foo(Base b) {bar(b);}
...
Deriv x;
foo(x); // does x get treated as Base for the bar() call
        // or retain its Deriv type?
Run Code Online (Sandbox Code Playgroud)

如果foo通过参考传递怎么办?

Dor*_*don 6

你正在通过值传递,因此你正在创建一个Base类型的新对象,并为它分配一个副本.

非常糟糕,你将体验切片..它不会保留它的阶段,不建议. http://en.wikipedia.org/wiki/Object_slicing

通过引用传递或const引用无论如何更好更快:

bar(const Base& b)
Run Code Online (Sandbox Code Playgroud)

或传递指向对象的指针,你将保持状态.bar(Base*b);

这将是处理这个问题的正确方法.