這讓我感到有點驚訝,但是我正在玩弄一些代碼,發現至少在我的電腦上,當函數通過引用接受父類並傳遞子實例時,切片問題不會'發生。舉例說明:通過引用傳遞總是避免切片問題?
#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
。
就像我說的,我有點驚訝。我的意思是,我知道通過引用傳遞就像傳遞指針(但我的理解更安全),但我不知道在這樣做時我仍然要保持多態。
我只是想確認一下,這是否應該發生,或者它是那些「它適用於我的機器」類型的實例?
這不是什麼「切片」。此外,該代碼甚至編譯?什麼是'使用std;'? –
表示它是'使用命名空間std'。我想我能夠明白這一點,但是清理了代碼,以使整個網站受益。 – Anthony