1. 程式人生 > >非virtual函數,用指針進行upcast

非virtual函數,用指針進行upcast

pre 靜態綁定 virt div main cast class ret int()

void print_func(A* p)
{
        p -> print();
}
int main()
{
        A a(1);
        B b(2,3);

        //a.print();
        //b.print();

        print_func(&a);// 這兩個調用的都是a的print
        print_func(&b);

        a = b;
        a.print();

        return 0;
}

B*這個類型會被當成A*來訪問。所以調用的是A的print。

因為這個尋址,不是用虛表尋址,而是編譯器做的靜態綁定。

非virtual函數,用指針進行upcast