これは少し驚きましたが、私はいくつかのコードで遊んでいましたが、関数が親クラスを参照で受け取り、子インスタンスを渡すと、少なくとも私のコンピュータでは、発生しません。説明する:参照渡しは常にスライスの問題を回避しますか?
#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;を使っているのは何ですか? –
これは 'using namespace std'です。私は、私はポイントを得ることができたと思ったが、サイト全体の利益のためにコードを整理した。 – Anthony