虚函数,函数重载,继承

sre*_*ree 1 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);
}
Run Code Online (Sandbox Code Playgroud)

o/p是'intdoub'

krl*_*mlr 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);
Run Code Online (Sandbox Code Playgroud)