erança múltipla sem funções virtuais em c ++
Eu me deparei com o problema do diamante e encontrei soluções diferentes para casos diferentes com um único diamante. No entanto, não consegui encontrar uma solução para diamantes "encadeados".
De acordo com a estrutura: sim, eu quero ter várias classes básicas a cada momento, para que a herança virtual não seja uma solução (é chamada de diamante, então?). Eu também queria evitar as funções get / set para cada camada intermediária de um diamant
p p
| |
k k
\ /
s
class parent { int val; };
class kid1 : public parent {};
class kid2 : public parent {};
class school : public kid1, public kid2 {};
Access val na classe pai agora funciona da seguinte maneira:
school* s = new school;
s->kid1::val=1; // works
Mas e o próximo diamante 'encadeado':
p p p p
| | | |
k k k k
\ / \ /
s s
| |
c c
\ /
w
class country1 : public school {};
class country2 : public school {};
class world : public country1, public country2 {};
Acesso à val via:
world* w = new world;
w->country1::kid1::val=1; // error
resulta em
error: ‘kid1’ is an ambiguous base of ‘world’
Por quê? A rota para o valor não está bem definida?