Witam!
Mam kilka pytań dotyczących unii:
1.
Funkcje składowe w unii mają sens tylko wtedy, kiedy pracują na jednym jej składniku :?: Bo i tak jak np. będziemy pracować na kilku to tylko ten ostatni jest brany pod uwagę. Przykład:
#include
using namespace std;
//////////////////////////////////////////////////
union bank
{
int licz;
double wspol;
bank(int liczba, double wspolczynnik)
{
licz = liczba;
wspol = wspolczynnik; //zapisujemy coś do nowego - stary ginie
}
};
//////////////////////////////////////////////////
int main()
{
bank duzy(456, 78.5);
cout << "wspol z unii - " << duzy.wspol; //78.5
cout << "\nlicz z unii - " << duzy.licz; //0 !
}
Tak :?: Te “chwyty” w unii: 2. inicjalizacja zbiorcza, czyli np.: (klasa to jakaś tam nazwa klasy ^.^)
klasa obiekt = { 67.8 };
jest też możliwa w strukturach i klasach, zgadza się :?: 3. eee jakby to powiedzieć - definicja obiektów po klamrze zamykającej:
union
{
//...
} obiekt, *wskaznik;
jest też możliwa w klasach i w strukturach :?: 4. Nie możliwe jest zrobienie klasy lub struktury anonimowej, ale powyższy chwyt jest wtedy dozwolony (mamy do dyspozycji tylko np. jeden obiekt klasy) :?: 5. Klasę lub strukturę też można zrobić statyczną jeżeli nie chce się, żeby była znana poza plikiem, tak jak jest w unii, prawda :?: 6. Trochę nie na temat ale jednak zadam to pytanie bo trochę wiąże się z tematem postu. Co prawda unia nie może być znana poza plikiem, ale może być (chyba) znana przestrzeń nazw. Jak mamy np. main.cpp :
namespace przestrzen
{
int liczba;
}
//---------------------------
int main()
{
//...
}
to jak w drugim pliku zasygnalizować istnienie zmiennych z przestrzeni nazw z 1-szego pliku (main.cpp) :?: Poprzez deklarację każdego z nich, tj. np.
extern przestrzen::liczba;
a potem zwykłe używanie (ale oczywiście nie zmienianie wartości ich):
cout << przestrzen::liczba;
:?:
_________________________________________________________________________________________
Z góry wielkie dzięki za odpowiedzi