c ++ - 声明继承自抽象类的继承抽象方法是否有任何性能问题?

时间:2013-10-02 16:56:13

标签: c++ performance abstract-class

我有3个班级

class GrandParent
{
    virtual int GrandParentMethod() = 0;
};

class Parent : public GrandParent
{
    virtual int ParentMethod() = 0;
    virtual int GrandParentMethod() = 0;
};

class Child : public Parent
{
    int ParentMethod() { return 1; }
    int GrandParentMethod() { return 0; }
};

我的问题是:在GrandParentMethod类中对Parent进行解码可以在一段时间后更容易实现Child类(只需要为抽象方法检查一个标头),但它是否有任何性能(内存?cpu?)问题?

2 个答案:

答案 0 :(得分:5)

对于您的应用程序应该没有性能或CPU影响,因为该方法是抽象的,尽管编译可能需要更长的时间,因为必须读取更多的代码。

但请注意,这不是常见的惯用C ++实践,最终可能会使某些代码阅读器/维护者感到困惑。此外,如果Parent方法的签名发生变化,那么通过在Grandparent级别重新声明它,您还有一个地方可以更改(或冒着意外隐藏方法的风险)。

答案 1 :(得分:0)

你可能会遇到设计问题(例如:你不会有另一个枚举 反映基类的枚举)。另一个问题是,抽象函数可以 有一个实现。

struct A {
    virtual void f() = 0;
};
void A::f() {}

struct B : A {
    virtual void f() override = 0;
};

struct X : A {
    // Delegates to A::f, which is well defined
    virtual void f() override { return A::f(); }
};

struct Y : B {
    // Delegates to B::f, which is a 'undefined reference'.
    virtual void f() override { return B::f(); }
};

但是没有性能问题。