Рассмотрим приведенный ниже код:
#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);
}
Вывод программы ниже:
1357
1358
Итак, для строки D d(d1) вызывается конструктор копирования класса D. Во время наследования нам нужно явно вызывать конструктор копирования базового класса, иначе вызывается только конструктор базового класса по умолчанию. Я понял до сих пор.
Моя проблема:
Теперь я хочу вызвать конструктор копирования всех базовых классов во время выполнения D d(d1). Для этого, если я попытаюсь ниже D(const D & obj) : A(obj), B(obj), C(obj) {cout << "8";}, я получаю эту ошибку: error: 'class A A::A' is inaccessible within this context
Как решить проблему. Мне нужен конструктор копирования A, B и C, когда вызывается конструктор копирования D. Это может быть очень небольшое изменение, но я не получаю.
class B: virtual protected A- person WhozCraig   schedule 30.04.2017public/protectedтеперь все работает: ideone.com/yjq3OG - person Failed Scientist   schedule 30.04.2017