Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zmienna, która jest wszystkim.


Rekomendowane odpowiedzi

Opublikowano

Witajcie.

Mam taki problem, ponieważ dostaliśmy do napisania program na zajęciach, w którym zmienna a jest wszystkim, tzn w pierwszym momencie jest zwykłym int'em, potem float'em, następnie string'iem i na koniec double'm. Nie mam pojęcia jak to ugryź. Na początku myślałem aby wszystko wrzucić jako char'a. Ale nie wiem czy to jest dobry pomysł.

Przykładowa klasa.

 

class Liczba

{

a = 5;

 

potem

a = 5.7;

 

potem

a = "Ala";

No i jak chce wyświetlić to 'a' będzie wyglądać w następujący sposób.

a = 5.7'Ala';

};

 

Mam nadzieje, że rozumiecie o co mi chodzi. Jeśli macie jakiś pomysł to proszę o pomoc.

 

@Do administracji

Jeśli jest to zły dział to proszę o przeniesienie. Bo nie wiedziałem w jakim innym dziale miałbym zamieścić ten temat.

 

 

 

Pozdrawiam,

lolek

Opublikowano

#include <iostream>
class Liczba
{
public:
union
{
 int i;
 float f;
 std::string* s;
 char c;
} a;

Liczba& operator=(int var)
{
 a.i = var;
 return *this;
}
Liczba& operator=(float var)
{
 a.f = var;
 return *this;
}
Liczba& operator=(std::string var)
{
 a.s = new std::string(var);
 return *this;
}
Liczba& operator=(char var)
{
 a.c = var;
 return *this;
}
int getInt()
{
 return a.i;
}
float getFloat()
{
 return a.f;
}
std::string getString()
{
 return *(a.s);
}
char getChar()
{
 return a.c;
}
};

int main()
{
Liczba obiekt;
obiekt = 34;
std::cout << obiekt.getInt() << '\n';

obiekt = 1.2f;
std::cout << obiekt.getFloat() << '\n';

obiekt = "ala ma kota";
std::cout << obiekt.getString() << '\n';

obiekt = 'i';
std::cout << obiekt.getChar() << '\n';
return 0;
}

przydało by się zrobić zabezpieczenie, żeby nie można było getować np int'a po "wrzuceniu" float'a etc.

Np tworzysz prywatnego enuma z liczbami odpowiadającymi typowi zmiennej ostatnio zapisanej. Wtedy przy wczytywaniu porównujesz czy typ się zgadza. Jeśli nie to rzucasz wyjątkiem czy coś.

 

@edit. Nie zapomnij o konstruktorze, konstruktorze kopiującym i destruktorze (bo tworzysz stringi na stercie)

Opublikowano

@UP Brakuje jeszcze metody "getType". I skoro już będzie getType, to można skorzystać z void* i cast'ować na bieżąco (co i tak się dzieje niejawnie przy unii ).

 

Rozwiązanie takie nazywa sie "variant" i, jeśli cię to ciekawi, możesz przyjrzeć się jakimś popularnym implementacjom, jak naprzykład Boost::Variant.

Ta sygnatura jest pusta.

Opublikowano

@up

Możesz coś więcej na temat tego variant napisać ? Ponieważ dopiero zaczynam z programowaniem i bardzo mnie to zainteresowało, a nie mogę nic konkretnego znaleźć co by mi pomogło w tym konkretnym przykładzie.

Opublikowano

naprawdę nic nie znalazłeś?

wpisz w googla 'boost variant' i weź pierwszy wynik

 

cast'ować na bieżąco (co i tak się dzieje niejawnie przy unii ).

a czy przypadkiem dane bajty nie są po prostu inaczej interpretowane, a castowanie nie zachodzi? Bo ja unię rozumiem jak wskaźniki różnego typu wskazujące na jedno miejsce w pamięci i w zależności od tego jaki wybierzemy to inaczej zinterpretujemy dane bajty/bajt

Opublikowano · Ukryte przez Xau, 25 Listopada 2012 - syf
Ukryte przez Xau, 25 Listopada 2012 - syf

7_logo.png

 

InUrl.pl - Magiczne Forum Gier na którym znajdziecie wiele ciekawostek o grach, hacki i wiele innym. Zapraszamy do udzielania się w działach takich jak:

-Metin2

-Minecraft

-League Of Legends

-NosTale

-WarRock

-CombatArms

-Pogaduszki

-Sugestie

I wiele innych

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...