samedi 29 avril 2017

How to call copy constructor of all base classes for copying most derived class object in diamond inheritance in C++?

Consider the below code:

#include<iostream>
using namespace std;
class A
{
public:
     A(){ cout <<"1";}
     A(const A &obj) { cout <<"2";}
};

class B: virtual A
{
public:
    B(){cout <<"3";}
    B(const B & obj) {cout<<"4";}
};

class C: virtual A
{
public:
   C(){cout<<"5";}
   C(const C & obj) {cout <<"6";}
};

class D:B,C
{
public:
    D()  {cout<<"7";}
    D(const D & obj) {cout <<"8";}
};

int main()
{
   D d1;
   cout<<"\n";
   D d(d1);
}

The output of the program is below: 1357 1358 So, for line D d(d1) copy constructor of D class is getting called. During inheritance we need to explicitly call copy constructor of base class otherwise only default constructor of base class is called. I understood till here. My Problem: Now I want to call copy constructor of all base classes during "D d(d1)" execution. For that if I try below D(const D & obj) : A(obj), B(obj), C(obj) {cout <<"8";} Then I get this error: error: 'class A A::A' is inaccessible within this context

How to resolve the issue. I want copy constructor of A, B and C when copy constructor of D gets called. It might be very small change but I am not getting. Please help. Thanks in advance!

Aucun commentaire:

Enregistrer un commentaire