1

我正在研究一个看起来像这样的问题:

struct A { ... }
struct B : A { int more; }

void Method(A a) { ... }

它的工作原理是这样的:您将 B 的实例传递给 Method,然后在正文中不能再访问该more字段?

我试着记住它的名字,但我记不住。在 Google 上进行搜索只会给我任何其他信息。

谁能给我名字,以便我继续研究更多?

4

1 回答 1

3

我认为实际上您在谈论的是slicing。当您通过基类型的参数按值传递某个派生类型的 C++ 对象时,派生部分被“切掉”,即使通过强制转换为派生类型也无法访问它们。

问题的解决方案是使用参考参数——即

void Method(A &a) { ... }

然后你可以将一个B对象传递给这个函数而不破坏这些B部分。

于 2012-05-09T04:46:02.480 回答