gpt4 book ai didi

c++ - 为什么基类对象必须是引用才能调用派生虚函数?

转载 作者:太空狗 更新时间:2023-10-29 23:53:34 25 4
gpt4 key购买 nike

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

   #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(); // ?

}

最佳答案

当您将派生对象分配给基类变量时,它会将“sliced”放入基类的实例中;它不再是派生实例的实例。这是必要的,因为基变量只为基类的实例保留了足够的空间;派生类的实例及其附加数据将不适合。

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

关于c++ - 为什么基类对象必须是引用才能调用派生虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10325958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com