gpt4 book ai didi

c++ - 使用基对象和派生对象的虚函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:41 25 4
gpt4 key购买 nike

我已经阅读了有关 vtable 的内容,并理解了指向基类和派生类对象的基类指针的概念。有人可以解释当基类和派生类都是对象并且派生类对象被分配给基类对象时如何创建 vtable 的情况。以下示例中的情况 3

#include <iostream>
#include <exception>
using namespace std;


class Base
{
public:
virtual void function1() { cout<<"Base - func1"<<endl; }
virtual void function2() { cout<<"Base - func2"<<endl; }
};

class Derived1: public Base
{
public:
virtual void function1() { cout<<"Derived1 - func1"<<endl; }
};

class Derived2: public Base
{
public:
virtual void function2() { cout<<"Derived2 - func2"<<endl; }
};

int main ()
{
// Case 1
Base* B1 = new Derived1();
B1->function1();
B1->function2();

// Case 2
cout<<endl;
Base* B2 = new Derived2();
B2->function1();
B2->function2();

// Case 3
cout<<endl;
Base B3;
Derived1 D1;
B3=D1;
B3.function1();
B3.function2();
}

输出:

Derived1 - func1
Base - func2

Base - func1
Derived2 - func2

Base - func1
Base - func2

最佳答案

B3=Derived;对象切片的一个例子...只分配给基类数据成员,vtable指针继续指向基类类函数。

你应该避免切片 - 它可能很危险(参见 this answer 的解释)。现在你知道这个术语了,你会很容易找到大量关于对象切片的读物....

关于c++ - 使用基对象和派生对象的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133762/

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