【发布时间】:2016-08-15 12:14:22
【问题描述】:
我正在处理一些生产代码,其中一些我无法安全地修改(不破坏东西)。我的问题是我想使用一个特定的方法,其中一个参数是指向类的指针。但是,作为参数的类并没有做我想要的。
所以我编写了该类的子类并尝试调用上述函数,但它仍然使用父类的方法。
我在下面有一个 MWE:
#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;
}
在上面运行这个的例子中,输出当然是:
in Child
in Parent
in Parent
in Parent
我相信问题是切片?基本上我正在转换为父类的指针,因此它被视为父类。
我已经通过在父类中将方法设置为虚拟方法看到了一些解决方法,但我没有那个选项。
有没有办法让 secondMethod 实际使用孩子的方法?具体而言,无需更改 Parent 类或 secondMethod。
【问题讨论】:
标签: c++ inheritance