#define / enum alternative
-
hallo
ich schreibe eine testroutine, um ein ticketautomaten (übungsprojekt zum erlernen von c++ objektorientiert) zu testen.
angenommen, diese testroutine würde verwendet, um mehrere ticketautomaten des gleichen aufbaus, nur von anderen programmierern zu prüfen, müssen alle variablen namen etc im header dem jeweiligen ticketautomaten angepasst werden.
ich suche eine bessere möglichkeit als mit #define zu arbeiten, da wie ich gelernt habe, dies sehr unschönes programmieren ist und viele gefahren auftauchen.
soweit ich weis eignen sich auch enums nicht, da ich denen nur einen zahlenwert zuweisen kann.beispiel:
die testroutine arbeitet nur mit folgenden var namen wie "nameOfCoin5CHF".
die eigentlich verwendeten var namen im ticketautomaten können dann so im header der testroutine vom user angepasst werden, ohne die ganze routine neu schrieben zu müssen#define nameOfCoin5CHF Fr5
#define nameOfCoin1CHF FR1
-
Willst du den objektorientierten oder den sinnvollen Ansatz wissen?
-
allgemein:
alternative im objektorientieren zu #define
-
Ehrlich gesagt verstehe ich das Problem nicht. Deine Testroutine besteht doch nicht nur aus lokalen Makros?
Sondern aus Funktionen usw. die die Namen der Parameter eigentlich nicht wissen müssen?
-
"sinnvoll" wäre die richtige Antwort gewesen, aber hier hast du es mit OOP:
class nameOfCoinFactory { virtual std::string getName(int value) const = 0; public: virtual ~nameOfCoinFactory() {} std::string nameOfCoin5CHF() const { return getName(5); } std::string nameOfCoin1CHF() const { return getName(1); } }; nameOfCoinFactory const& getCoinFactory() { class myCoinFactory : public nameOfCoinFactory { std::map<int, std::string> names; virtual std::string getName(int value) const { std::map<int, std::string>::const_iterator iter = names.find(value); if (iter == names.end()) throw std::invalid_argument("there is no such coin"); return iter->second; } public: myCoinFactory() { names[1] = "FR1"; names[5] = "Fr5"; } }; static myCoinFactory instance; return instance; } int main() { std::cout << getCoinFactory().nameOfCoin1CHF() << '\n'; std::cout << getCoinFactory().nameOfCoin5CHF() << '\n'; }
-
#define nameOfCoin5CHF Fr5 #define nameOfCoin1CHF FR1zu
char const* const nameOfCoin5CHF = "Fr5"; char const* const nameOfCoin1CHF = "FR1";