【发布时间】:2021-12-14 17:01:47
【问题描述】:
对不起,如果我没有很好地表达这个问题,但是说代码看起来像这样:
Class Parent
{
public:
virtual void Sit() = 0;
}
Class Child1 : public Parent
{
public:
virtual void Sit(obj* chair) override;
}
Class Child2 : public Parent
{
public:
virtual void Sit(obj* bench) override;
}
基本上,我需要我的对象从同一个抽象类继承,但它们需要为相同的函数接收不同的参数,因为它们具有不同的行为,我想这样的事情是可能的,但我不知道具体如何。
【问题讨论】:
-
一旦你有不同的参数集,它就不是同一个函数。它被称为函数重载,你有两个版本。
-
如果你想通过指向基类的指针调用函数,这是不可能的。
-
您的示例没有演示采用不同的参数。
Child1::Sit()和Child2::Sit()都将obj*作为参数。如果您将Parent::Sit()的声明更改为virtual void Sit(obj*) = 0,那么在此特定示例中您没有问题。 -
使用多态性
-
如果您确实需要不同的参数类型,那么您应该问自己为什么该函数存在于
Parent级别。如果你不能通过Parent*有意义地调用Sit()(因为你不知道哪些参数是合适的),那么Sit()不太可能在Parent中定义。
标签: c++ visual-c++