为什么它不打印'怀疑'?寻找详细的解释。谢谢你的时间!
#include<iostream.h>
using namespace std;
class B{
public:
virtual int ft(int i) { cout <<"int"; return 0;}
};
class D: public B {
public:
double ft(double i){cout << "doub"; return 0.0;}
int ft(int i) { cout <<"intdoub"; return 0;}
};
int main(){
B *pB = new D;
pB->ft(2.3);
}
o / p是&#39; intdoub&#39;
答案 0 :(得分:6)
变量pB
的类型为B*
,并且不知道函数double D::ft(double)
,只知道virtual int B::ft(int)
。尽管您应该收到编译器警告,但double
值2.3
到int
的转换会自动发生。
尝试:
dynamic_cast<D*>(pB)->ft(2.3);
dynamic_cast<D*>(pB)->B::ft(2.3);