【发布时间】:2015-11-02 15:32:43
【问题描述】:
我搜索了有关构造函数中的虚函数的相关问题,我知道如果我们在基类的构造函数中调用虚函数,则只会调用 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;
}
【问题讨论】:
-
你有什么问题?
-
b.fun()与this->fun()不同。
标签: c++ constructor virtual