【发布时间】:2012-01-06 21:37:29
【问题描述】:
这让我有点吃惊,但我正在玩一些代码并发现,至少在我的计算机上,当一个函数通过引用接受父类并且您传递一个子实例时,切片问题不会不会发生。举例说明:
#include <iostream>
class Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Parent::DoSomething" << endl;
}
};
class Child : public Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Child::DoSomething" << endl;
}
};
void performSomething(Parent& parent)
{
parent.doSomething();
}
int main(int argc, char** argv)
{
Child myChild;
performSomething(myChild);
return 0;
}
这会打印出Child::DoSomething。
就像我说的,我有点惊讶。我的意思是,我知道通过引用传递就像传递指针(但在我的理解中更安全),但我不知道这样做时我仍然必须保持多态性。
我只是想确定一下,这是应该发生的,还是属于“它在我的机器上工作”类型的实例之一?
【问题讨论】:
-
这不是“切片”的意思。此外,该代码甚至可以编译吗?
using std;是什么? -
意思是
using namespace std。我认为我能够理解这一点,但为了网站的整体利益,我清理了代码。
标签: c++ polymorphism pass-by-reference