Przeładowanie operatora

Przeładowanie operatora
mozgwieczysty
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Hej! Mam problem z przeładowaniem operatora. W main mam takie coś:

Kopiuj
#include "Money.h"
#include <iostream>
int Currency::USD = 1;
int Currency::PLN = 0; 

int main() {
  using namespace std;
  Money x(1034179*Currency::USD); // w jakis sposob konstruktor z USD musi odroznic PLN
  cout << Currency::type(x) << endl;
  
  const Money y(5633*Currency::PLN); 
  cout << Currency::type(y) << endl;
 

Zadeklarowałam powyższe funkcje tak:

Kopiuj
class Currency{
	public:
	static int USD;
	static int PLN;
	static char * type(const Money & obj);
};

void operator*(const Money & obj, int typ_waluty) {
	obj.typ_waluty = typ_waluty;
	

definicja funkcji type::

Kopiuj
char * Currency::type(const Money & obj) {
	//cout<<obj.typ_waluty<<endl;
	if(obj.typ_waluty == 1) {
		return "USD";
	} else return "PLN";
}

Niestety w wyniku program nie działa poprawnie, a operator* nie wykonuje się.

DR
  • Rejestracja: dni
  • Ostatnio: dni
0

Bardzo namieszałeś, a da się bez żadnego przeładowania operatorów:

Kopiuj
#include <map>
#include <string>

class Currency
{
public:
	enum ISO { PLN, USD, EUR };
	static std::map<ISO, std::string> name;
	static const std::string& type(ISO code) { return name[code]; }
};

std::map<Currency::ISO, std::string> Currency::name = {{PLN, "PLN"}, {USD, "USD"}, {EUR, "EUR"}};

class Money
{
public:
	double amount;
	Currency::ISO code;
	Money(const double &amount, Currency::ISO code) : amount(amount), code(code) {}
	const std::string& type() const { return Currency::type(code); }
};
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Zawsze opisz co ma robić twój kod, potem jak próbujesz to zrealizować, a następnie co ci nie działa.

Zamieszam ci w głowie i dam ten link: http://en.cppreference.com/w/cpp/language/user_literal

  • Rejestracja: dni
  • Ostatnio: dni
0
MarekR22 napisał(a):

Zamieszam ci w głowie i dam ten link: http://en.cppreference.com/w/cpp/language/user_literal

O jezu :O Robią z tego języka jeden wielki śmietnik - już chyba są tu konstrukcje ze wszystkich innych języków pomieszane ze sobą w brzydki sposób
Zamiast ogarniać ten burdel to wprowadzają kolejne zaciemniające kod konstrukcje :|

gośćabc
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 500
0
Świetny Mleczarz napisał(a):
MarekR22 napisał(a):

Zamieszam ci w głowie i dam ten link: http://en.cppreference.com/w/cpp/language/user_literal

O jezu :O Robią z tego języka jeden wielki śmietnik - już chyba są tu konstrukcje ze wszystkich innych języków pomieszane ze sobą w brzydki sposób
Zamiast ogarniać ten burdel to wprowadzają kolejne zaciemniające kod konstrukcje :|

raczej nie usuwają starych, bo wielkie korporacje mają kod kompilowany na starych "fjuczersach" języka, jakby usunęli je to wprowadzanie poprawek do softu stałoby się koszmarem

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.