1

为什么它不打印'doub'?求详细解释。谢谢你的时间!

#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 是 'intdoub'

4

1 回答 1

6

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

尝试:

dynamic_cast<D*>(pB)->ft(2.3);
dynamic_cast<D*>(pB)->B::ft(2.3);
于 2012-12-11T16:16:58.113 回答