#include <iostream>
using namespace std;
class PhanSo{
private:
int tu;
int mau;
public:
//loi
//chuyen kieu = constructor va dung template
template <typename T1>
PhanSo(T1 t=0,T1 m=1);
PhanSo(T1 t,T1 m){
cout<<"Phan so da duoc tao\n";
this->tu=(t);
this->mau=(m);
}
//chuyen kieu = constructor ko dung template
// PhanSo(int t=0,int m=1){
// cout<<"Phan so da duoc tao\n";
// this->tu=(t);
// this->mau=(m);
// }
void set(); //ham nhap phan so
void get(); // ham xuat phan so
// overloading operator
friend istream &operator>>(istream &,PhanSo &);
friend PhanSo operator+(const PhanSo &,const PhanSo &);
friend PhanSo operator-(const PhanSo &,const PhanSo &);
friend PhanSo operator*(const PhanSo &,const PhanSo &);
friend PhanSo operator/(const PhanSo &,const PhanSo &);
};
void PhanSo::set(){
cin>>*this; // toan tu cin da duoc nap chong !!
}
void PhanSo::get(){
if(this->tu==0)
cout<<"0\n";
else if(this->mau==1 )
cout<<this->tu<<endl;
else if(this->mau==0)
cout<<"Phan So khong hop le vi mau so bang khong!\n";
else
cout<<this->tu<<"/"<<this->mau<<endl;
}
istream &operator>>(istream &in,PhanSo &ps){
cout<<"Nhap tu so: ";
in>>ps.tu;
cout<<"Nhap mau so: ";
in>>ps.mau;
return in;
}
PhanSo operator+(const PhanSo &c,const PhanSo &d){
PhanSo kq;
kq.tu=(c.tu*d.mau) + (d.tu*c.mau);
kq.mau=c.mau*d.mau;
return kq;
}
PhanSo operator-(const PhanSo &a,const PhanSo &b){
PhanSo kq;
kq.tu=(a.tu*b.mau) - (b.tu*a.mau);
kq.mau=a.mau*b.mau;
return kq;
}
PhanSo operator*(const PhanSo &a,const PhanSo &b){
PhanSo kq;
kq.tu=a.tu*b.tu;
kq.mau=a.mau*b.mau;
return kq;
}
PhanSo operator/(const PhanSo &a,const PhanSo &b){
PhanSo kq;
kq.tu=(a.tu*b.mau) ;
kq.mau=a.mau*b.tu;
return kq;
}
int main(){
PhanSo x;
PhanSo y;
PhanSo z(4,5);
cout<<"Khoi tao x!\n";
x.set();
x.get();
cout<<"Khoi tao y!\n";
y.set() ;
y.get();
cout<<"Khoi tao z: ";
z.get();
char ope; //bien luu phep toan muon tinh
cout<<"Nhap phep toan muon tinh voi x va y(+,-,*,/): ";
cin>>ope;
switch (ope){
case '+':{
z=x+y;
z.get();
break;
}
case '-':{
z=x-y;
z.get();
break;
}
case '*':{
z=x*y;
z.get();
break;
}
case '/':{
z=x/y;
z.get();
break;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFBoYW5Tb3sKcHJpdmF0ZToKCWludCB0dTsKCWludCBtYXU7CnB1YmxpYzoKCS8vbG9pCgkvL2NodXllbiBraWV1ID0gY29uc3RydWN0b3IgdmEgZHVuZyB0ZW1wbGF0ZSAKCQoJdGVtcGxhdGUgPHR5cGVuYW1lIFQxPgoJUGhhblNvKFQxIHQ9MCxUMSBtPTEpOwoJUGhhblNvKFQxIHQsVDEgbSl7CgkJY291dDw8IlBoYW4gc28gZGEgZHVvYyB0YW9cbiI7CgkJdGhpcy0+dHU9KHQpOwoJCXRoaXMtPm1hdT0obSk7Cgl9CgkKCQoJLy9jaHV5ZW4ga2lldSA9IGNvbnN0cnVjdG9yIGtvIGR1bmcgdGVtcGxhdGUKLy8JUGhhblNvKGludCB0PTAsaW50IG09MSl7Ci8vCQljb3V0PDwiUGhhbiBzbyBkYSBkdW9jIHRhb1xuIjsKLy8JCXRoaXMtPnR1PSh0KTsKLy8JCXRoaXMtPm1hdT0obSk7Ci8vCX0KCXZvaWQgc2V0KCk7ICAgICAgCQkvL2hhbSBuaGFwIHBoYW4gc28KCXZvaWQgZ2V0KCk7CQkJCS8vIGhhbSB4dWF0IHBoYW4gc28KCQoJLy8gICBvdmVybG9hZGluZyBvcGVyYXRvcgoJZnJpZW5kIGlzdHJlYW0gJm9wZXJhdG9yPj4oaXN0cmVhbSAmLFBoYW5TbyAmKTsKCWZyaWVuZCBQaGFuU28gb3BlcmF0b3IrKGNvbnN0IFBoYW5TbyAmLGNvbnN0IFBoYW5TbyAmKTsgICAgCQoJZnJpZW5kIFBoYW5TbyBvcGVyYXRvci0oY29uc3QgUGhhblNvICYsY29uc3QgUGhhblNvICYpOwoJZnJpZW5kIFBoYW5TbyBvcGVyYXRvciooY29uc3QgUGhhblNvICYsY29uc3QgUGhhblNvICYpOwoJZnJpZW5kIFBoYW5TbyBvcGVyYXRvci8oY29uc3QgUGhhblNvICYsY29uc3QgUGhhblNvICYpOwp9OwoKdm9pZCBQaGFuU286OnNldCgpewoJY2luPj4qdGhpczsgCQkJLy8gdG9hbiB0dSBjaW4gZGEgZHVvYyBuYXAgY2hvbmcgICEhCgkKfQp2b2lkIFBoYW5Tbzo6Z2V0KCl7CglpZih0aGlzLT50dT09MCkKCQljb3V0PDwiMFxuIjsKCWVsc2UgaWYodGhpcy0+bWF1PT0xICkKCQljb3V0PDx0aGlzLT50dTw8ZW5kbDsKCWVsc2UgaWYodGhpcy0+bWF1PT0wKQoJCWNvdXQ8PCJQaGFuIFNvIGtob25nIGhvcCBsZSB2aSBtYXUgc28gYmFuZyBraG9uZyFcbiI7CgllbHNlIAoJCWNvdXQ8PHRoaXMtPnR1PDwiLyI8PHRoaXMtPm1hdTw8ZW5kbDsKfQoKaXN0cmVhbSAmb3BlcmF0b3I+Pihpc3RyZWFtICZpbixQaGFuU28gJnBzKXsKCWNvdXQ8PCJOaGFwIHR1IHNvOiAiOwoJaW4+PnBzLnR1OwoJY291dDw8Ik5oYXAgbWF1IHNvOiAiOwoJaW4+PnBzLm1hdTsKCXJldHVybiBpbjsKfQoKUGhhblNvIG9wZXJhdG9yKyhjb25zdCBQaGFuU28gJmMsY29uc3QgUGhhblNvICZkKXsKCVBoYW5TbyBrcTsKCWtxLnR1PShjLnR1KmQubWF1KSArIChkLnR1KmMubWF1KTsKCWtxLm1hdT1jLm1hdSpkLm1hdTsKCXJldHVybiBrcTsKfQoKUGhhblNvIG9wZXJhdG9yLShjb25zdCBQaGFuU28gJmEsY29uc3QgUGhhblNvICZiKXsKCVBoYW5TbyBrcTsKCWtxLnR1PShhLnR1KmIubWF1KSAtIChiLnR1KmEubWF1KTsKCWtxLm1hdT1hLm1hdSpiLm1hdTsKCXJldHVybiBrcTsKfQoKUGhhblNvIG9wZXJhdG9yKihjb25zdCBQaGFuU28gJmEsY29uc3QgUGhhblNvICZiKXsKCVBoYW5TbyBrcTsKCWtxLnR1PWEudHUqYi50dTsKCWtxLm1hdT1hLm1hdSpiLm1hdTsKCXJldHVybiBrcTsKfQoKUGhhblNvIG9wZXJhdG9yLyhjb25zdCBQaGFuU28gJmEsY29uc3QgUGhhblNvICZiKXsKCVBoYW5TbyBrcTsKCWtxLnR1PShhLnR1KmIubWF1KSA7CglrcS5tYXU9YS5tYXUqYi50dTsKCXJldHVybiBrcTsKfQoKaW50IG1haW4oKXsKCVBoYW5TbyB4OwoJUGhhblNvIHk7CglQaGFuU28geig0LDUpOwoJY291dDw8Iktob2kgdGFvIHghXG4iOwoJeC5zZXQoKTsKCXguZ2V0KCk7Cgljb3V0PDwiS2hvaSB0YW8geSFcbiI7Cgl5LnNldCgpCTsKCXkuZ2V0KCk7Cgljb3V0PDwiS2hvaSB0YW8gejogIjsKCXouZ2V0KCk7CgljaGFyIG9wZTsJCQkJIC8vYmllbiBsdXUgcGhlcCB0b2FuIG11b24gdGluaCAKCWNvdXQ8PCJOaGFwIHBoZXAgdG9hbiBtdW9uIHRpbmggdm9pIHggdmEgeSgrLC0sKiwvKTogIjsKCWNpbj4+b3BlOwoJc3dpdGNoIChvcGUpewoJCWNhc2UgJysnOnsKCQkJej14K3k7CgkJCXouZ2V0KCk7CgkJCWJyZWFrOwoJCX0KCQljYXNlICctJzp7CgkJCXo9eC15OwoJCQl6LmdldCgpOwoJCQlicmVhazsKCQl9CgkJY2FzZSAnKic6ewoJCQl6PXgqeTsKCQkJei5nZXQoKTsKCQkJYnJlYWs7CgkJfQoJCWNhc2UgJy8nOnsKCQkJej14L3k7CgkJCXouZ2V0KCk7CgkJCWJyZWFrOwoJCX0KCX0KCQoJCQkKCQoJCn0KCgoKCgoKCg==
prog.cpp:15:11: error: expected ‘)’ before ‘t’
PhanSo(T1 t,T1 m){
~ ^~
)
prog.cpp: In function ‘PhanSo operator+(const PhanSo&, const PhanSo&)’:
prog.cpp:63:9: error: no matching function for call to ‘PhanSo::PhanSo()’
PhanSo kq;
^~
prog.cpp:14:2: note: candidate: ‘template<class T1> PhanSo::PhanSo(T1, T1)’
PhanSo(T1 t=0,T1 m=1);
^~~~~~
prog.cpp:14:2: note: template argument deduction/substitution failed:
prog.cpp:63:9: note: couldn't deduce template parameter ‘T1’
PhanSo kq;
^~
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(const PhanSo&)’
class PhanSo{
^~~~~~
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(PhanSo&&)’
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp: In function ‘PhanSo operator-(const PhanSo&, const PhanSo&)’:
prog.cpp:70:9: error: no matching function for call to ‘PhanSo::PhanSo()’
PhanSo kq;
^~
prog.cpp:14:2: note: candidate: ‘template<class T1> PhanSo::PhanSo(T1, T1)’
PhanSo(T1 t=0,T1 m=1);
^~~~~~
prog.cpp:14:2: note: template argument deduction/substitution failed:
prog.cpp:70:9: note: couldn't deduce template parameter ‘T1’
PhanSo kq;
^~
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(const PhanSo&)’
class PhanSo{
^~~~~~
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(PhanSo&&)’
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp: In function ‘PhanSo operator*(const PhanSo&, const PhanSo&)’:
prog.cpp:77:9: error: no matching function for call to ‘PhanSo::PhanSo()’
PhanSo kq;
^~
prog.cpp:14:2: note: candidate: ‘template<class T1> PhanSo::PhanSo(T1, T1)’
PhanSo(T1 t=0,T1 m=1);
^~~~~~
prog.cpp:14:2: note: template argument deduction/substitution failed:
prog.cpp:77:9: note: couldn't deduce template parameter ‘T1’
PhanSo kq;
^~
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(const PhanSo&)’
class PhanSo{
^~~~~~
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(PhanSo&&)’
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp: In function ‘PhanSo operator/(const PhanSo&, const PhanSo&)’:
prog.cpp:84:9: error: no matching function for call to ‘PhanSo::PhanSo()’
PhanSo kq;
^~
prog.cpp:14:2: note: candidate: ‘template<class T1> PhanSo::PhanSo(T1, T1)’
PhanSo(T1 t=0,T1 m=1);
^~~~~~
prog.cpp:14:2: note: template argument deduction/substitution failed:
prog.cpp:84:9: note: couldn't deduce template parameter ‘T1’
PhanSo kq;
^~
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(const PhanSo&)’
class PhanSo{
^~~~~~
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(PhanSo&&)’
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp: In function ‘int main()’:
prog.cpp:91:9: error: no matching function for call to ‘PhanSo::PhanSo()’
PhanSo x;
^
prog.cpp:14:2: note: candidate: ‘template<class T1> PhanSo::PhanSo(T1, T1)’
PhanSo(T1 t=0,T1 m=1);
^~~~~~
prog.cpp:14:2: note: template argument deduction/substitution failed:
prog.cpp:91:9: note: couldn't deduce template parameter ‘T1’
PhanSo x;
^
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(const PhanSo&)’
class PhanSo{
^~~~~~
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(PhanSo&&)’
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:92:9: error: no matching function for call to ‘PhanSo::PhanSo()’
PhanSo y;
^
prog.cpp:14:2: note: candidate: ‘template<class T1> PhanSo::PhanSo(T1, T1)’
PhanSo(T1 t=0,T1 m=1);
^~~~~~
prog.cpp:14:2: note: template argument deduction/substitution failed:
prog.cpp:92:9: note: couldn't deduce template parameter ‘T1’
PhanSo y;
^
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(const PhanSo&)’
class PhanSo{
^~~~~~
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided
prog.cpp:5:7: note: candidate: ‘constexpr PhanSo::PhanSo(PhanSo&&)’
prog.cpp:5:7: note: candidate expects 1 argument, 0 provided