如果在cpp代码中判断子类有没有重写父类的某个虚接口
时间: 2023-02-11 11:24:55 浏览: 127
cpp代码-在不修改main函数的前提下改变输出
在 C++ 代码中判断子类有没有重写父类的某个虚函数,可以使用 typeid 运算符和 dynamic_cast 运算符。
使用 typeid 运算符可以获取对象的类型信息,并且可以使用 typeid(类名) 获取类型信息。如果一个子类重写了父类的虚函数,那么对于子类的对象来说,使用 typeid 获取到的类型信息应该是子类的类型。
使用 dynamic_cast 运算符可以进行运行时的类型转换,并且如果该转换失败,会返回一个空指针。如果一个子类重写了父类的虚函数,那么对于子类的对象来说,使用 dynamic_cast 将该对象转换成父类指针时,返回的结果应该是一个非空指针。
示例代码如下:
```cpp
class Parent {
public:
virtual void func() {}
};
class Child : public Parent {
public:
virtual void func() override {}
};
int main() {
Child c;
Parent& p = c;
if (typeid(p) == typeid(Child)) {
std::cout << "Child has overridden the virtual function of Parent." << std::endl;
}
if (dynamic_cast<Child*>(&p) != nullptr) {
std::cout << "Child has overridden the virtual function of Parent." << std::endl;
}
return 0;
}
```
在这个例子中, 因为c为 Child 类型,转换成 Parent 引用 会输出 Child has overridden the virtual function of Parent.
在这两种方法中,dynamic_cast 通常
阅读全文