I've wrote a piece of code, but I am confused with its output:
#include <iostream>
using namespace std;
class B{
public:
    virtual void foo() {cout << "B::foo" << endl;}
};
class D:public B{
public:
    virtual void foo() {cout << "D::foo" << endl;}
    void disp() {cout << "D::disp" << endl;}
};
void func(B *pb){
    D *pd1 = static_cast<D*>(pb);
    pd1->foo();
    pd1->disp();
}
int main(int argc, char *argv[])
{
    B* pb = new B();
    func(pb); 
    return 0;
}
The output is:
B::foo
D::disp
But as far as I know, pb points to type B. And there's no function named disp() in it? So, why could it get access to disp() function in class D?
 
     
     
     
     
    