没有upcast 也不会发生多态

class A{
public:
virtual void f(){ cout << "A::f()"<<endl;}
};

class B:public A{
public:
        virtual void f(){cout << "B::f()"<<endl;}
};

int main()
{
        A a;
        B b;

        A *p = &b;

        p->f();  //发生了多态,这里调用的是B::f()。因为有upcast,所以是多态。

        a = b;  //这里只是完成了一个赋值操作
        p = &a;

        p->f();   //调用的是A::f()
return 0; }

猜你喜欢

转载自www.cnblogs.com/buddho/p/10607173.html