虚函数,函数重载,继承

时间:2012-12-11 16:14:11

标签: c++ virtual

为什么它不打印'怀疑'?寻找详细的解释。谢谢你的时间!

#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;

1 个答案:

答案 0 :(得分:6)

变量pB的类型为B*,并且不知道函数double D::ft(double),只知道virtual int B::ft(int)。尽管您应该收到编译器警告,但double2.3int的转换会自动发生。

尝试:

dynamic_cast<D*>(pB)->ft(2.3);
dynamic_cast<D*>(pB)->B::ft(2.3);