【发布时间】:2017-12-24 03:19:04
【问题描述】:
如何判断基类(B)的指针是否(多态性)覆盖了基类的某个虚函数?
class B{
public: int aField=0;
virtual void f(){};
};
class C : public B{
public: virtual void f(){aField=5;};
};
class D: public B{};
int main() {
B b;
C c;
D d;
std::vector<B*> bs;
bs.push_back(&b);
bs.push_back(&c);
bs.push_back(&d);
for(int n=0;n<3;n++){
//std::cout<<(bs[n]->f)==B::f<<std::endl;
//should print "true false true"
}
}
我尝试比较函数指针bs[n]->f 和B::f 的地址,但无法编译。
感觉这个问题可能是重复的,但是找不到(抱歉)。
【问题讨论】:
-
你想在这里做什么?这似乎是X Y problem
-
@Justin 主要是出于好奇。我想知道这是否可能......它可能对一些罕见的优化案例有用(如果我碰巧需要它)。
-
这个问题没有多大意义;因为
f是虚拟的,所以bs[n]->f始终是虚拟调用 -
你的意思是问:如何判断
*bs[n]是否有动态类型B? -
@M.M 不,我只想检查单个特定函数
f是否被覆盖。例如checkF(static_cast<B*>(new D()))应该返回“它没有被覆盖”。 ....D可以覆盖B的其他虚函数,但我不在乎。
标签: c++ c++14 virtual-functions