3

我有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; }
};

我的问题是:GrandParentMethodParent类中声明可以更容易地Child在一段时间后实现类(只需要检查一个标头以获取抽象方法),但它是否有任何性能(内存?cpu?)问题?

4

2 回答 2

5

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

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

于 2013-10-02T17:12:11.860 回答
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(); }
};

不过,没有性能问题。

于 2013-10-02T18:05:26.717 回答