More methods in derived classes than base class
在这个派生类的例子中,我想问一个关于编程风格的问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class A { public: virtual foo1()=0; } class B: public A { public: virtual foo1(); virtual foo2(); } class C: public A { public: virtual foo1(); } int main() { B mB(); C mC(); mB.foo2() //OK! mC.foo2() // obviously, it is not correct return 0;} |
因此,派生类的公共方法应该小于或等于抽象基类吗?
如果派生类需要更多的方法,这些方法应该是私有的吗?
派生类几乎总是拥有比基类更多的公共函数。这就是继承的要点:您可以定义一个抽象的基类,它只概述变量的基本行为,然后派生类可以针对特定情况扩展这个基本行为。
继承类始终是基类的专用化。它实现更具体的功能(通常更多的功能一起实现)。在您的例子中,您期望两个不同的专门化在基类定义的行为之外以相同的方式运行。(
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Intermediate : public A { public: virtual foo1()=0; virtual foo2()=0; } class B: public Intermediate { public: virtual foo1(); virtual foo2(); } |
现在,任何可以实现
在我处理过的几乎所有项目中,我们都有比派生类功能更少的基类——在极端情况下,基类甚至可能几乎没有功能,但派生类有几十个函数和半打成员变量。
这正是派生类要做的。
显然,您需要知道您拥有什么类型的派生类,并且只有在派生类"额外"函数可用时才使用它们。
派生类必须至少实现基类中的所有抽象方法。这是最小值。如果您添加了其他方法、成员或其他由您决定的方法。但是,从类中派生并不添加任何内容是不明智的,因为这不是继承的目的(至少是
这个类结构没有任何问题。派生类拥有比父类更多的方法没有什么错——这很常见。行