M
Marcin Kalicinski
Hi,
Having the following program:
#include <iostream>
struct A
{
A() { std::cout << "A::A()\n"; }
A(const A &) { std::cout << "A::A(const A &)\n"; }
};
struct B: virtual public A
{
B() { std::cout << "B::B()\n"; }
B(const B &b): A(b) { std::cout << "B::B(const B &)\n"; }
};
struct C: public B
{
C() { std::cout << "C::C()\n"; }
C(const C &c): B(c) { std::cout << "C::C(const C &)\n"; }
};
int main()
{
C c;
std::cout << "---\n";
C c2(c);
}
Why does it print:
A::A()
B::B()
C::C()
---
A::A() <--- here
B::B(const B &)
C::C(const C &)
I.e. why is copy constructor for A not called, but default constructor is
called instead?
Having the following program:
#include <iostream>
struct A
{
A() { std::cout << "A::A()\n"; }
A(const A &) { std::cout << "A::A(const A &)\n"; }
};
struct B: virtual public A
{
B() { std::cout << "B::B()\n"; }
B(const B &b): A(b) { std::cout << "B::B(const B &)\n"; }
};
struct C: public B
{
C() { std::cout << "C::C()\n"; }
C(const C &c): B(c) { std::cout << "C::C(const C &)\n"; }
};
int main()
{
C c;
std::cout << "---\n";
C c2(c);
}
Why does it print:
A::A()
B::B()
C::C()
---
A::A() <--- here
B::B(const B &)
C::C(const C &)
I.e. why is copy constructor for A not called, but default constructor is
called instead?