gpt4 book ai didi

c++ - 虚函数对象切片

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:36 24 4
gpt4 key购买 nike

我的问题是引用this question这解释了虚函数在对象切片的情况下如何工作,最终调用基类虚函数和 Wikipedia article这解释了下面代码的派生类的虚拟表布局

    class A{

public:
virtual void func(){ cout<<"\n In A:func";}
};

class B:public A{

public:
virtual void func(){ cout<<"\n In B:func";}
};

main(){
A *ptr1 = new B();

A oA = *ptr1;

oA.func();
}




DerviedClassObjectB:
+0: pointer to virtual method table of B

virtual method table of B:
+0: B::func

以上程序输出“In A::func”。

但是如果 B 类的虚表不知道基类 A::func 怎么会最终调用 A::func

最佳答案

A oA = *ptr1;

这会将任何成员变量复制到一个新的 A 对象中。 vtable 指针不是普通成员变量,不会被复制。因此,针对此对象调用的任何后续虚函数都将作为 A 对象,因为它 是 A 对象。

关于c++ - 虚函数对象切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479712/

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