有时我想强制子类覆盖函数,例如:
class A
{
virtual void foo() = 0;
};
class B : public A
{
virtual void foo() {...}
};
class C : public B
{
//people may forget to override function foo
};
Run Code Online (Sandbox Code Playgroud)
将中间类中的虚函数也声明为纯虚函数。请记住,即使该函数被声明为纯虚函数,您也可以在中间类中提供该函数的实现。
class A
{
virtual void foo() = 0;
};
class B : public A
{
virtual void foo() = 0;
};
void B::foo()
{
}
class C : public B
{
// Now you must provide an implementation
// if you want to create an instance of C.
};
Run Code Online (Sandbox Code Playgroud)
如果您不需要实例化,则此策略有效B。如果您确实需要实例化B,则需要考虑不同的策略。您还必须重新考虑您的类层次结构。在良好的设计中,所有非叶类都应该是抽象的。
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |