Cześć, mam problem z poniższym zadaniem.
Treść zadania:
Stwórz klasę Variable, która będzie posiadać metody:
getInt - pobieranie wartości, jako int
getDouble - pobieranie wartości, jako double
getChar - pobieranie wartości, jako znak
getShort - pobieranie wartości, jako short
getUnsigned - pobieranie wartości, jako unsigned
analogiczne settery
Zadaniem klasy jest możliwość przechowywania różnych typów zmiennych. Do zapisu danych w klasie należy użyć jednego pola. Nie można konwertować typow p(int -> double itp), należy uży reinterpret_cast.
Coś do czego udało mi się dojść to tak wyglądający kod. Jest to jedna z wersji, które udało mi się napisać:
Plik main.cpp
#include <iostream>
#include "Variable.h"
using namespace std;
int main()
{
Variable v1;
v1.setDouble(487.6);
cout << v1.getInt() << endl;
v1.setChar('A');
cout << v1.getInt() << endl;
v1.setInt(-123);
cout << v1.getUnsigned() << endl;
}
Plik Variable.h
#pragma once
#include <iostream>
class Variable
{
private:
double* data;
public:
void setInt(int value);
void setDouble(double value);
void setChar(char value);
void setShort(short value);
void setUnsigned(unsigned value);
int getInt();
double getDouble();
char getChar();
short getShort();
unsigned getUnsigned();
};
Variable.cpp
#include "Variable.h"
#include <iostream>
using namespace std;
void Variable::setInt(int value)
{
data = reinterpret_cast <double*>(&value);
}
void Variable::setDouble(double value)
{
data = reinterpret_cast <double*>(&value);
}
void Variable::setChar(char value)
{
data = reinterpret_cast <double*>(&value);
}
void Variable::setShort(short value)
{
data = reinterpret_cast <double*>(&value);
}
void Variable::setUnsigned(unsigned value)
{
data = reinterpret_cast <double*>(&value);
}
int Variable::getInt()
{
return *data;
}
double Variable::getDouble()
{
return *data;
}
char Variable::getChar()
{
return *data;
}
short Variable::getShort()
{
return *data;
}
unsigned Variable::getUnsigned()
{
return *data;
}
Mój pomysł na ten program był taki aby każdy z typów na początku w setterach zmieniać na typ double, ponieważ ten typ to typ, którego rozmiar ma nawięcej bajtów z pozostałych typów danych w tym zadaniu, a następnie chciałem spróbować znowu konwertować typ już na inny w zależności od tego jaki chcemy uzyskać. Próbowałem już wielu rzeczy i cokolwiek od tego momentu kodu bym nie sprobował kończy się źle dlatego piszę tutaj z prośbą o pomoc o jakąś wskazówkę co mógłbym zrobić lub zmienić w moim kodzie. W załącznikach zip z powyższymi plikami.
Dziękuję za wszelką pomoc