[英]Unable to call base constructor in template class using virtual inheritance
[英]Multiple virtual inheritance and constructor call of base class
有这个代码:
#include <iostream>
class Bazowa
{
int x;
public:
Bazowa() : x(55){}
Bazowa(int x_) : x(x_) {}
void fun()
{
std::cout << x << "fun\n";
}
};
class Pochodna1 : virtual public Bazowa
{
public:
Pochodna1() : Bazowa(101) {}
};
class Pochodna2 : virtual public Bazowa
{
public:
Pochodna2() : Bazowa(103) {}
};
class SuperPochodna : public Pochodna1, public Pochodna2
{
public:
SuperPochodna() : {}
};
int main() {
SuperPochodna sp;
sp.fun(); // prints 55fun
return 0;
}
执行该程序后,将打印“55fun”。 在Pochodna1和Pochodna2类中构造函数调用发生了什么 - 它们被忽略了吗? 为什么班级Bazowa的成员'x'被设置为'55',而不是'101'或'103'?
始终从最终叶类调用虚拟基础构造函数。 不会调用虚拟基础的其他构造函数。 在你的情况下, SuperPochodna()
调用Bazowa()
并且不使用Pochodna1
和Pochodna2
中对Bazowa(int)
的调用。
请参阅http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.14或只是谷歌“虚拟基础构造函数”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.