我有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?)问题?
答案 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(); }
};
但是没有性能问题。