以下是我的代码,
#include<iostream>
#include<string>
using namespace std;
class TestClass
{
public:
virtual void test(string st1, string st2);
};
class ExtendedTest: public TestClass
{
public:
virtual void test(string st1, string st2);
};
void TestClass::test(string st1, string st2="st2")
{
cout << st1 << endl;
cout << st2 << endl;
}
void ExtendedTest::test(string st1, string st2="st2")
{
cout << "Extended: " << st1 << endl;
cout << "Extended: " << st2 << endl;
}
void pass(TestClass t)
{
t.test("abc","def");
}
int main()
{
ExtendedTest et;
pass(et);
return 0;
}
当我运行代码时,调用基类的方法(“test”)。
但我希望调用 child 的方法,因为我将方法指定为虚函数。
那么如何调用子类的方法呢?谢谢。
void pass(TestClass t)
{
t.test("abc","def");
}
当你这样做时,你传递的对象会得到sliced into a TestClass
它的身份丢失了,所以它现在的行为就像TestClass
并相应地调用该方法。
要解决此问题,您需要通过t
通过@Nick 建议的引用,或(不推荐)通过指针。它现在将保留其身份并调用适当的函数,只要test
被标记为虚拟
编辑:固定拼接->切片..太多生化奇兵..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)