У меня есть следующие классы, и я пытаюсь получить доступ к базовому члену, используя объект класса H, и я получаю предупреждение H :: a.
class E {
public:
E() : a(11) { }
int a;
};
class F : public E {
public:
F() : b(22) { }
int b;
};
class G : public E {
public:
G() : c(33) { }
int c;
};
class H: public F, public G {
public:
H() : d(44) { }
int d;
};
Я попытался сделать элемент данных статичным, но потом он не позволяет инициализировать его в базовом конструкторе. Какое решение этих двух проблем?
Класс "H" имеет две переменные, называемые "a", одну из F и одну из G. Вы можете либо использовать классификатор,
H::a
или вы можете использовать "виртуальный" спецификатор наследования (см. qaru.site/questions/122850/...)
#include <iostream>
struct A {
int a;
};
struct B : virtual public A {
};
struct C : virtual public A {
};
struct D : virtual public B, virtual public C {
void d1() { a = 1; }
void d2() { a = 2; }
};
int main() {
D d;
d.d1();
d.d2();
std::cout << d.a << std::endl;
}