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?