如何使子方法被调用:虚拟关键字不起作用?

2023-12-14

以下是我的代码,

#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(使用前将#替换为@)

如何使子方法被调用:虚拟关键字不起作用? 的相关文章

随机推荐