小编Min*_* Li的帖子

构造函数中虚函数的奇怪行为

我已经在构造函数中搜索了有关虚函数的相关问题,我知道如果我们在基类的构造函数中调用虚函数,则只调用virtual的基本版本.

但是,我在下面发布的内容显示,在Base构造函数中调用virtual实际上调用了D2中的虚拟版本.

我知道它似乎有点复制,但我想知道是否有人帮助我.

我的代码:

#include<iostream>
struct B
{
  B()=default;
  B(const B& b)  {b.fun();}
  virtual void fun()const  {std::cout<<"virtual_B"<<std::endl;}
};
struct D1:public B
{
  D1()=default;
  D1(const D1& d1):B(d1)  {}
  void fun()const  {std::cout<<"virtual_D1"<<std::endl;}
};
struct D2:public D1
{
  D2()=default;
  D2(const D2& d2):D1(d2)  {}
  void fun()const  {std::cout<<"virtual_D2"<<std::endl;}
};
int main()
{
  D2 a;
  D2 b=a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ virtual constructor

1
推荐指数
1
解决办法
68
查看次数

标签 统计

c++ ×1

constructor ×1

virtual ×1