如果在cpp代码中判断子类有没有重写父类接口
时间: 2023-02-11 18:24:54 浏览: 140
C#中子类重写父类的方法
可以使用 `typeid` 和 `dynamic_cast` 来判断子类是否重写了父类的接口。具体实现方法如下:
```cpp
class Base {
public:
virtual void foo() { }
};
class Derived : public Base {
public:
virtual void foo() override { }
};
int main() {
Base* b = new Derived();
if (typeid(*b) == typeid(Derived)) {
Derived* d = dynamic_cast<Derived*>(b);
if (d) {
std::cout << "Derived has overridden Base's foo()" << std::endl;
}
}
delete b;
return 0;
}
```
在这个例子中,首先使用 `typeid` 来检查对象的类型是否为 `Derived`,然后使用 `dynamic_cast` 将指向基类的指针强制转换为指向派生类的指针,如果转换成功(d不是null),则说明子类重写了父类的接口.
另外需要注意的是,需要保证父类接口为虚函数,子类重写父类接口要使用 override关键字.
阅读全文