避免向下类型转换
12.6 ID_downCast
从基类到派生类的向下类型转换往往意味着现有接口已经不能满足需求,故应避免这种转换。
示例:
class A { .... };
class B: public A {
public:
void bar(); // A new function
};
void foo(A* a) {
if (B* p = dynamic_cast<B*>(a)) { // Bad, down cast
p->bar();
}
}
例中 foo 接口对基类参数进行向下类型转换是不利于维护的,当这种特殊处理较多时,应利用多态方法合理重构。
class A {
....
public:
virtual void bar();
};
class B: public A {
public:
void bar() override;
};
void foo(A* a) {
if (a) {
a->bar(); // Good
}
}