#include <iostream>
#include<map>
#include<string>
#include<vector>
enum Oper {op_plus, op_minus, op_razy, op_dziel};
struct LiczbaZespolona{};
class WyrazenieZespolone {
private:
LiczbaZespolona lz1;
LiczbaZespolona lz2;
Oper op;
public:
WyrazenieZespolone() = default;
WyrazenieZespolone(const LiczbaZespolona, const LiczbaZespolona, Oper);
LiczbaZespolona oblicz() const;
friend std::ostream& operator << (std::ostream&, const WyrazenieZespolone&);
friend std::istream& operator >> (std::istream&, WyrazenieZespolone&);
friend std::istream& operator >> (std::istream&, Oper&);
};
//this comes first so that it can be used in strm >>wz.op
std::istream& operator >> (std::istream& strm, Oper& t_op){
char znak;
strm >> znak;
switch(znak){
case '+': {t_op = op_plus; break;}
case '-': {t_op = op_minus; break;}
case '*': {t_op = op_razy; break;}
case '/': {t_op = op_dziel; break;}
default : {strm.setstate(std::ios::failbit);}
}
return strm;
}
//similarly this comes before so that it can be used in strm >> wz.lz1
std::istream& operator>>(std::istream& strm, LiczbaZespolona&)
{
//do something here
return strm;
}
std::istream& operator >> (std::istream& strm, WyrazenieZespolone& wz){
strm >> wz.lz1 >> wz.op >> wz.lz2;
return strm;
}
int main()
{
return 0;
}