Jedna zmienna wiele typów

Odpowiedz Nowy wątek
2012-11-24 23:04
0

Witam.
Tak dla treningu postanowiłem napisać sobie prosty kawałek kodu. Mianowicie jedna zmienna dajmy na to A jest wielu typów, czyli int, float, string, char. Pomyślałem, że dobrym rozwiązaniem byłoby użycie 'variants' bo gdzieś o tym przeczytałem, a nie wiem za wiele na ten temat. I tu nasuwa się moja prośba. Czy może mi ktoś to jakoś wytłumaczyć lub pomóc zrozumieć. Za każdą pomoc dziękuje.

Pozdrawiam,
Etho

Pozostało 580 znaków

2012-11-24 23:12
0

A wypróbuj unie. http://pl.wikipedia.org/wiki/Unia_%28programowanie%29

Pozostało 580 znaków

2012-11-24 23:19
0

Na razie nie mam pomysłu jak to zrobić. Ale zastanawiałem się czy jest możliwość, że wpisując z klawiatury obojętnie co będzie to przyjmował ? Tzn jak wpisze z palca 6 to jest int, jak wpisze 5.5 to float, a jak 'ala' to zwykły string. Jeśli można tak zrobić to jak to uczynić ? Proszę o jakieś wskazówki.

Pozostało 580 znaków

2012-11-24 23:28
0

No to zobacz linka co ci wysłałem unia to taki jakby rodzaj struktury który w przeciwieństwie do struktury przechowuje jedna wartość jednego tupu który był zadeklarowany w niej. Nie możesz w niej dawać stringów bo ma dynamicznie rozszerzana pamięć. Możesz zadeklarować wszelkie inty, flouty czy tablice i będzie to widoczne pod jedna nazwą a w jednej chwili może być przechowywana tylko jedna wartość więc jest to o co tobie chodzi a przynajmniej tak myśle.

edytowany 1x, ostatnio: mr_jaro, 2012-11-24 23:30

Pozostało 580 znaków

2012-11-24 23:29
0

próbuj konwertować wczytanego stringa na poszczególne typy począwszy od tych zawierających najmniej informacji. Czyli np char, int, float, string etc. Jeśli dana konwersja się powiedzie to poinformuj użytkownika o typie do jakiego został skonwertowany string i podaj do niego wskaźnik void*. Tak widzę rozwiązanie, ale nie widzę sensu w tym zadaniu

edytowany 2x, ostatnio: Sopelek, 2012-11-24 23:30

Pozostało 580 znaków

2012-11-24 23:37
2

Może powiedz co chcesz osiągnąć. Bardzo prawdopodobnie że obrałeś już nie najlepszą drogę.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2012-11-25 00:07
0

Napisałem wyżej co chce osiągnąć. Po prostu jedna zmienna ma mieć wiele typów. Nie wiem już jak to inaczej mam napisać. Po prostu jak w konsoli wyskoczy komunikat, że wpisz co chcesz. To jedna zmienna będzie robić za wszystko. Wpisze 'ala' to pojawi się na ekranie 'ala'. Jak wpisze 5.6 to pojawi się 5.6. Inaczej już nie mogę tego napisać.

Wymyśliłem coś takiego.
[code]
class Liczba
{
public:
union
{
int i;
float f;
string* s;
}
};

Liczba& operator = (int var);
{
a.i = var;
return* this;
}
...

int getInt();
{
return a.i;
}
[/code]

No ale coś nie za bardzo działa.

edytowany 1x, ostatnio: Etho, 2012-11-25 00:08

Pozostało 580 znaków

2012-11-25 00:11
Rev
0

Wpisze 'ala' to pojawi się na ekranie 'ala'. Jak wpisze 5.6 to pojawi się 5.6. Inaczej już nie mogę tego napisać.

Może po prostu użyj string ;)? Napis 5.6 też zostanie wyświetlony jako 5.6.


edytowany 1x, ostatnio: Rev, 2012-11-25 00:11

Pozostało 580 znaków

2012-11-25 00:39
1

Wymyśliłem coś takiego.

taaak. tyyyy.
Działa bo sprawdzałem. Możliwe tylko, że ty nie umiesz z tego korzystać

btw. wykasowałeś kawałek a; przy końcu bloku unii i wszystko pojebałeś

union
   {
      int i;
      float f;
      string* s;
   }a;

wywal ten nawias co linijkę dalej

btw2. wywal średniki przy przeciążeniach operatorów i metodach
wybacz, że spytam, ale czy ty jesteś jakiś upośledzony czy coś, że nawet kodu nie umiesz skopiować i sprawdzić czy działa?

edytowany 6x, ostatnio: Sopelek, 2012-11-25 00:45
Pokaż pozostałe 2 komentarze
Teoretycznie możesz go pozwać do sądu za uwłaszczenie praw autorskich do fragmentu kodu :) - norbi452 2012-11-25 14:21
Uważam to za zbyteczną uwagę. Nigdzie nie wykorzystałem danego kodu dla korzyści materialnych. Dlatego też nie było by to przestępstwo, a wykroczenie. Więc zapewne by się zakończyło na karze grzywny. Lecz dalej uważam to za zbyteczne :) - Etho 2012-11-25 19:01
Grzywna zawsze coś :D - norbi452 2012-11-25 19:29
niech płaci odszkodowanie ;d, z grzywny nie mam korzyści - Sopelek 2012-11-25 19:32
Raczej nie będzie to coś czego się spodziewasz :P - Etho 2012-11-25 19:48

Pozostało 580 znaków

2012-11-25 00:59
1

unii mogą być bezimenne:

class Liczba
{
public:
   union
   {
      int i;
      float f;
      string *s;
   };
};
Liczba L;
L.i=4;
L.f=2.2;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2012-11-25 14:01
0

@Sopelek
Wybacz jeśli zostałeś urażony moim brakiem kompetencji ale próbuje to zrozumieć, a nie samo kopiuj wklej. Co mi przyjedzie po tym jak to zrobię? Jedno wielkie gówno.

Co do samego sedna tematu to wszystko działa. Ale moim zamierzeniem było wpisywanie w konsoli wartości, a nie na 'sztywno' jak jest to uczynione w obu przypadkach. Bo teraz jak odpalam to wyskakuje mi to co jest przypisane do każdego operatora. No i wszystko super. Ale dalej nie jest to tak jak ja chciałem.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0