为什么基类对象必须是调用派生虚函数的引用?

far*_*oft 2 c++ virtual overriding reference class

为什么基类对象必须是调用派生虚函数的引用?

   #include<iostream>
    using namespace std;

    class A {

    public:
        virtual void print() { cout << "Hello 1" << endl; }

    };

    class B : public A {

    public:
        int x;
        void print() { cout << "Hello " << x << endl; }

    };

    void main(){

        B obj1;
        A &obj2 = obj1;
        A obj3 = obj1; // Why it is different from obj2

        obj1.x = 2;

        obj1.print();
        obj2.print();
        obj3.print(); // ?

    }
Run Code Online (Sandbox Code Playgroud)

Wyz*_*a-- 5

将派生对象分配给基础变量时,它会" 切片 "到基类的实例中; 它不再是派生的实例.这是必要的,因为基本变量只有足够的空间保留给基类的实例; 派生类的实例及其附加数据将不适合.

使用引用时,不必将对象复制到较小的空间中,因此不会发生切片.