#include <cstdlib>
#include <iostream>
using namespace std;
template <class T>
class kompleks{
friend class operasi<T>;
friend ostream& operator<<(ostream&, const kompleks<T>&);
friend istream& operator>>(istream&, kompleks<T>&);
public:
kompleks(Ts=0, Tt=0):a(s),b(t){}
void cetak();
kompleks operator-();
kompleks operator-(const kompleks<T>&);
kompleks operator+(const kompleks<T>&);
private:
Ta;
Tb;
};
template <class T>
void kompleks<T>::cetak(){
if(b>0)cout<<"Bilangan Kompleks: "<<a<<"+"<<b<<"i";
else cout<<"Bilangan kompleks: "<<a<<b<<"i";
cout<<endl;
}
template <class T>
kompleks<T> kompleks<T>::operator-(){
kompleks x;
x.a = a;
x.b = -b;
return x;
}
template <class T>
kompleks<T>kompleks<T>::operator-(const kompleks<T>& m){
kompleks x;
x.a = a - m.a;
x.b = b - m.b;
return x;
}
template <class T>
kompleks<T>kompleks<T>::operator+(const kompleks<T>& m){
kompleks x;
x.a = a + m.a;
x.b = b + m.b;
return x;
}
template <class T>
ostream& operator<<(ostream& out, const kompleks<T>& x){
if(x.b==0)out<<'['<<x.a<<']';
else if(x.a==0&&x.b==1)out<<'['<<"i"<<']';
else if(x.a==0&&x.b==-1)out<<'['<<"-i"<<']';
else if(x.a==0&&x.b>1)out<<'['<<x.b<<"i"<<']';
else if(x.a==0&&x.b<-1)out<<'['<<x.b"i"<<']';
else if(x.b==1)out<<'['<<x.a<<"+"<<"-i"<<']';
else if(x.b>0)out<<'['<<x.a<<"+"<<x.b<<"-i"<<']';
else if(x.b==-1)out<<'['<<x.a<<"-i"<<']';
else out<<'['<<x.a<<x.b<<"i"<<']';
return out;
}
template <class T>
istream& operator>>(istream& in, kompleks <T>& x){
cout<<"Masukkan bagian real: ";
in>>x.a;
cout<<"Masukkan bagian imajiner: ";
in>>x.b;
return in;
}
template <class T>
class operasi{
public:
kompleks<T>jumlah(const kompleks<T>&, const kompleks<T>&);
kompleks<T>kali(const kompleks<T>&, const kompleks<T>&);
kompleks<T>kurang(const kompleks<T>&, const kompleks<T>&);
};
template <class T>
kompleks<T> operasi<T>::jumlah(const kompleks<T>& m, const kompleks<T>& n){
kompleks<T> temp;
temp.a=m.a+n.a;
temp.b=m.b+n.b;
return temp;
}
template <class T>
kompleks<T> operasi<T>::kurang(const kompleks<T>& m, const kompleks<T>& n){
kompleks<T> temp;
temp.a=m.a-n.a;
temp.b=m.b-n.b;
return temp;
}
template <class T>
kompleks<T> operasi<T>::kali(const kompleks<T>& m, const kompleks<T>& n){
kompleks<T> temp;
temp.a=(m.a*n.a)-(m.b*n.b);
temp.a=(m.a*n.b)-(m.b*n.a);
return temp;
}
int main(int argc, char *argv[])
{
kompleks<int> x(2,3),y(4,-4),t;
operasi<int> z;
cout<<"Menggunakan cetak(): ";
x.cetak();
cout<<"Menggunakan overloading: "<<x;
cout<<"Konjugat: "<<-x;
y.cetak();
cout<<"\nPenjumlahan menggunakan methods: ";
t=z.jumlah(x,y);
t.cetak();
cout<<"Penjumlahan menggunakan operator: ";
t=x+y;
cout<<x<<"+"<<y<<"="<<t;
cout<<"\nPerkalian menggunakan methods: ";
t=z.kali(x,y);
t.cetak();
cout<<"Perkalian menggunakan operator: ";
t=x*y;
cout<<x<<"*"<<y<<"="<<t;
t=x-y;
cout<<"\n"<<x<<"-"<<y<<"="<<t<<endl;
kompleks<int> n;
cin>>n;
cout<<n;
return 0;
system("PAUSE");
return EXIT_SUCCESS;
}
0 komentar:
Posting Komentar