检测拼写错误的虚函数
-
19-09-2019 - |
题
我已经被这个问题抓住了不止一次:
class A{
public:
virtual ~A() {}
virtual int longDescriptiveName(){ return 0; }
};
class B: public A{
public:
virtual int longDescriptveName(){ return 1; } // Oops
};
如果该函数是纯虚,编译器捕捉到该错误。但是,如果它不是这可能是一个可怕的错误追查。问题的部分原因是,函数名可能太长。但我仍然不知道,有没有办法提前看到这些错误?
解决方案
一种可能是与执行很少使用的纯虚函数:
virtual int longDescriptiveName() = 0
{
return 0;
}
此力导出类来覆盖它。然后,他们可以单独调用基类的实现,如果他们只希望这种行为。
此外,你需要确保你的继承层次是平的,而不是多层,这总体上是好的,因为反正继承是脆弱的地步了,打桩层。
其他提示
如果您使用Microsoft Visual C ++ 2005或更高版本编译,有非标准扩展让你写:
virtual int longDescriptveName() override { return 1; }
和编译器会抱怨。如果你与其他编译器编译同样,它可能是明智的做出的#define这样可以控制的行为。
老necro'd的问题,而是一个好办法是与单元测试来测试初期,无论是正式或非正式的多,你开始使用类之前。换句话说,早期检查的是:
A test_a;
B test_b;
A& poly_a = test_a;
A& poly_b = test_b;
assert(poly_a.longDescriptiveName() == 0);
assert(poly_b.longDescriptiveName() == 1);
之前的 的你写一个万多行代码使用你的类。
不隶属于 StackOverflow