基类Base里面有两个虚函数A和B,子类Drive继承至Base,重写了其中一个接口有重写另一个接口。使用者获取到到的是指向子类B的基类指针。使用者如何知道子类重写的是接口A还是接口B,cpp有机制实现么,如果能实现写一个demo
时间: 2023-02-20 13:46:30 浏览: 56
使用者可以使用dynamic_cast来实现,这里有一个demo:
#include <iostream>
class Base {
public:
virtual void A() = 0;
virtual void B() = 0;
};
class Drive : public Base {
public:
virtual void A() override { std::cout << "Drive A" << std::endl; }
virtual void B() override { std::cout << "Drive B" << std::endl; }
};
int main()
{
Base* b = new Drive();
if (Drive* d = dynamic_cast<Drive*>(b)) {
d->A();
d->B();
}
delete b;
return 0;
}
相关问题
基类Base里面有两个虚函数A和B,子类Drive继承至Base,重写了其中一个接口有重写另一个接口。使用者获取到到的是指向子类B的基类指针。使用者如何知道子类重写的是接口A还是接口B,cpp有机制实现饿么
有一种方法可以实现,就是使用虚函数表。虚函数表是由编译器自动生成的,存放在每个类的虚函数指针的内存空间中。每个类的虚函数表都会记录虚函数的地址,如果子类重写了父类的虚函数,虚函数表中就会记录子类重写的虚函数地址。使用者可以通过虚函数表来判断子类是否重写了父类的虚函数,从而知道子类重写的是接口A还是接口B。
基类Base里面有两个虚函数A和B,子类Drive继承至Base,重写了其中一个接口,没有重写另一个接口。使用者或者到的是指向子类B的基类指针。使用者如何知道子类重写的是哪个指针,cpp有机制实现饿么
C++提供了一个名为“虚函数表”的技术,它可以帮助您跟踪子类是否重写了基类中的虚函数。当使用者将指向子类的基类指针传递给虚函数时,编译器会检查虚函数表,以确定调用哪个虚函数。如果子类重写了某个虚函数,编译器将调用子类的虚函数,而不是基类的虚函数。