virtual base class and friend

O

omveer.chaudhary

Hi,

I'm trying below scenario:
class xx
{
xx(){}
friend class yy;
};

class yy: virtual public xx
{
public:
yy(){}
};

class zz:public yy
{
public:
};

Q1: It doesn't work with ZZ obj; Please help me understanding it.

class xx
{
xx(){}
friend class yy;
};

class yy: public xx
{
public:
yy(){}
};

class zz:public yy
{
public:
};

Q2: After removing virtual, it works for zz obj;. Why and how?

Thanks in advance.

Regards
 
T

Tobias Müller

Hi,

I'm trying below scenario:
class xx
{
xx(){}
friend class yy;
};

class yy: virtual public xx
{
public:
yy(){}
};

class zz:public yy
{
public:
};

Q1: It doesn't work with ZZ obj; Please help me understanding it.

Your class zz implicitly has the following constructor:

class zz : public yy
{
public:
zz() : xx(), yy() {}
}

Constuctors of virtual base classes are called from every derived class
directly.

Consider the following case:

class A
{
public:
A();
A(int i);
};

class B : virtual public A
{
public:
B() : A() {}
};

class C : virtual public A
{
public:
C() : A(4) {}
};

class D : public B, public C
{
public:
// D() : B(), C() {} // -> Error, the A subobject
// is the same for B and C
// and can only be
// constructed once. But use
// A() or A(4)?
D() : A(), B(), C() {} // Correct
};
class xx
{
xx(){}
friend class yy;
};

class yy: public xx
{
public:
yy(){}
};

class zz:public yy
{
public:
};

Q2: After removing virtual, it works for zz obj;. Why and how?
Your class zz implicitly has the following constructor:

class zz : public yy
{
public:
zz() : yy() {}
}

Constuctors of non-virtual base are only called from classes that inherit
directly.

Consider again the same case, but without virtual inheritance:

class A
{
public:
A();
A(int i);
};

class B : public A
{
public:
B() : A() {}
};

class C : public A
{
public:
C() : A(4) {}
};

class D : public B, public C
{
public:
D() : B(), C() {} // Correct: B and C have both
// their own A object and
// do the initialization on their own.
// D() : A(), B(), C() {} // Error
};

Tobi
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top