继承:使用父指针中的继承方法

时间:2016-04-22 03:06:07

标签: c++ inheritance

我正在使用一些生产代码,其中一些我无法安全地修改(不破坏内容)。我的问题是我想使用一个特定的方法,其中一个参数是指向类的指针。但是作为参数的类不能达到我想要的效果。

所以我写了一个该类的子类,并试图调用上面的函数,但它仍然使用父类的方法。

我的MWE如下:

foo = build.buildVariableResolver`.resolve("FOO")
println "FOO=$foo"

在上面的示例中运行此输出当然是:

#include <iostream>

class Parent 
{
public:
    Parent() {};
    void method() {std::cout<<"in Parent\n";}
};

class Child : public Parent
{
public:
    Child() {};
    void method() {std::cout<<"in Child\n";}
};

void secondMethod(Parent* Pptr)
{
    Pptr->method();
}

int main()
{
    Child c = Child();
    Parent* parentPtr = &c;

    c.method();
    parentPtr->method();

    secondMethod(parentPtr);
    secondMethod(&c);

    return 0;
}

我认为问题是切片?基本上我正在转向父类的指针,所以它被认为是父类。

通过在父类中创建虚拟方法但我没有那个选项,我已经看到了一些方法。

有没有办法让secondMethod实际使用这个孩子的方法?具体而言,无需更改Parent类或secondMethod。

2 个答案:

答案 0 :(得分:0)

如果您无法更改父类或“secondMethod”,请不要这样做。 'secondMethod'的构造函数将其参数定义为Parent *。将Child *传递给'secondMethod'将导致Child *向上转换为Parent *,从而将导致Parent的'方法'实现被调用。

答案 1 :(得分:0)

如果您无法将method更改为虚拟功能,则可以导入模板以解决问题。 template<typename T> void secondMethod(T* Pptr) { Pptr->method(); } 它可以工作!!!