继承还是多态?

时间:2015-12-13 08:34:56

标签: c++ inheritance polymorphism

几周前我做了一个程序员的测试并没有通过。测试是那些充满“让你!”的测试。 c ++问题,与我们在日常编码中所面临的问题无关。我希望我已经打印出所有这些并在网上发布,但为时已晚。一个我记得的,我想知道是否有人能够肯定地澄清最佳答案。

下面的代码是否显示了继承或多态的示例?对我来说,两者都是,但我最终回答继承,因为它只给了我选择的选择。派生类显然继承了基类的属性,但由于方法的行为只有一个变化,它也可以是一个多态的例子。

有任何意见吗?

class Base
{
public:
    Base() {}
    ~Base() {}

    virtual int Foo(int a)
    {
        return a*a;
    }

};

class Derived : public Base
{
public:
    Derived() {}
    ~Derived() {}

    int Foo(int a)
    {
        return a*a*a;
    }
};

1 个答案:

答案 0 :(得分:0)

它显然显示了遗传。没有继承就很难有多态性(虽然你可以用模板进行编译时多态)。我不认为代码显示多态性 - 必须涉及通过基指针/引用使用派生对象。

所以:

    Derived d;
    d.Foo(5);   // No polymorphism.

但是

    std::unique_ptr<Base>() Factory(int i);
    auto pBase = Factory(1);
    auto a = pBase->Foo(5);  // *This* is polymorphism