Witam. Chciałem sobie przetestować na prostym programie wieloznaczność. Mam klasy A, B w klasie A jest zmienna o nazwie a, klasa C dziedziczy po klasach A i B, klasa D jest osobną klasą i również posiada zmienna o nazwie a, klasa E dziedziczy po klasach C i D.
I teraz próbuję z klasy E odwołać się do zmiennej a np. tak:
void E::wypisz()
{
cout << a << " " << b << " " << c << " " << e << endl;
}
I kompilator sygnalizuje mi, że zmienna a jest dwuznaczna. Czemu? Przecież do klasy D gdzie zadeklarowana jest zmienna a, klasa E ma bliższą drogę niż do klasy A, w której także jest zadeklarowana zmienna a. Tutaj taki obrazek zrobiony na szybko w paincie, żeby zobrazować jak to wygląda i o co mi chodzi:
http://imageshack.us/photo/my-images/100/64873502.jpg/
I kod programu, gdyby komuś chciało się analizować:
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
int a;
A(int x) {a = x;};
void wypisz();
};
class B
{
public:
int b;
B(int x) {b = x;};
void wypisz();
};
class C : public A, public B
{
public:
int c;
C(int x, int y, int z) : A(x), B(y) {c = z;};
void wypisz();
};
class D
{
public:
int a;
D(int x) {a = x;};
void wypisz();
};
class E : public C, public D
{
public:
int e;
E(int z, int y, int v, int w, int x) : C(z, y, v), D(w) {e = x;};
void wypisz();
};
void A::wypisz()
{
cout << a << endl;
}
void B::wypisz()
{
cout << b << endl;
}
void C::wypisz()
{
cout << a << " " << b << " " << c << endl;
}
void D::wypisz()
{
cout << a << endl;
}
void E::wypisz()
{
cout << a << " " << b << " " << c << " " << e << endl;
}
int main(void)
{
A a(4);
B b(6);
C c(10, 14, 100);
D d(150);
E e(1, 2, 3, 4, 5);
a.wypisz();
b.wypisz();
c.wypisz();
d.wypisz();
e.wypisz();
cin.get();
cin.get();
return 0;
}