Sakura
Thú CƯng :
Số bài viết : 1124 Điểm : 1688 Được cảm ơn : 35 Ngày sinh : 03/11/1990 Tham gia ngày : 16/03/2010 Tuổi : 34 Đến từ : Bình Dương Ngề nghiệp : IT Student
| Tiêu đề: [OOP] - Bài Tập Phân Số - Overload Toán Tử 20/7/2010, 09:04 | |
| Đây là bài tập bữa thực hành cô cho! thiết kế 1 Class PHANSO, thực hiện các thao tác nhập xuất, tối giản, đổi ra số thực và overload các toán tử ( +, -, *, /), và mình đã làm quá trời toán tử luôn rồi, có cả +=, -=, *=, /=, ==, !=, >, <, >=, <=, >>, << và .... Minh họa cực kỳ dề hiểu! CODE: - Code:
-
#include <iostream> #include <conio.h> #include <math.h>
using namespace std; int USCLN(int a, int b) { while(a != 0 && b != 0) { if(a > b) a = a - b; else b = b - a; } return a + b; } class PHANSO { private: int tu; int mau; public: friend ostream &operator<<(ostream &stream, PHANSO ob); friend istream &operator>>(istream &stream, PHANSO &ob); PHANSO() { this->tu = 0; this->mau = 1; } void ToiGian() { int usc = USCLN(abs(this->tu), abs(this->mau)); this->tu = this->tu / usc; this->mau = this->mau / usc; } float DinhTri() { return (float)this->tu / (float)this->mau; } void Input() { cout<<"\nNhap Tu: "; cin>>this->tu; do { cout<<"Nhap Mau: "; cin>>this->mau; }while(this->mau == 0); } void Output() { cout<<this->tu<<"/"<<this->mau<<endl; } void operator= (PHANSO A) { this->tu = A.tu; this->mau = A.mau; } PHANSO operator+ (PHANSO A) { PHANSO C; C.tu = this->tu * A.mau + this->mau * A.tu; C.mau = this->mau * A.mau; return C; } void operator+= (PHANSO A) { this->tu = this->tu * A.mau + this->mau * A.tu; this->mau = this->mau * A.mau; } PHANSO operator- (PHANSO A) { PHANSO C; C.tu = this->tu * A.mau - this->mau * A.tu; C.mau = this->mau * A.mau; return C; } void operator-= (PHANSO A) { this->tu = this->tu * A.mau - this->mau * A.tu; this->mau = this->mau * A.mau; } PHANSO operator* (PHANSO A) { PHANSO C; C.tu = this->tu * A.tu; C.mau = this->mau * A.mau; return C; } void operator*= (PHANSO A) { this->tu = this->tu * A.tu; this->mau = this->mau * A.mau; } PHANSO operator/ (PHANSO A) { PHANSO C; C.tu = this->tu * A.mau; C.mau = this->mau * A.tu; return C; } void operator/= (PHANSO A) { this->tu = this->tu * A.mau; this->mau = this->mau * A.tu; } bool operator== (PHANSO A) { if(this->tu * A.mau == this->mau * A.tu) return true; return false; } bool operator!= (PHANSO A) { if(this->tu * A.mau != this->mau * A.tu) return true; return false; } bool operator> (PHANSO A) { if(this->tu * A.mau > this->mau * A.tu) return true; return false; } bool operator< (PHANSO A) { if(this->tu * A.mau < this->mau * A.tu) return true; return false; } bool operator>= (PHANSO A) { if(this->tu * A.mau >= this->mau * A.tu) return true; return false; } bool operator<= (PHANSO A) { if(this->tu * A.mau <= this->mau * A.tu) return true; return false; } }; ostream &operator<<(ostream &stream, PHANSO PS) { stream << PS.tu << "/" << PS.mau; return stream; } istream &operator>>(istream &stream, PHANSO &PS) { cout << "\nNhap Tu: "; stream >> PS.tu; do { cout << "Nhap Mau: "; stream >> PS.mau; }while(PS.mau == 0); return stream; }
int main() { cout<<"-----BAI TAP CAI DAT LOP PHAN SO VA CAS PHEP TOAN CO BAN-------\n\n"; cout<<"\n----------------Programming By Edward_Thien -------------------\n\n\n"; //Cac Khai Bao Doi Tuong PHANSO A, B, C, D, E; PHANSO TONG, HIEU, TICH, THUONG; //Cac Phuong Thuc In, Out cout<<"\n--- Cac Phuong Thuc In, Out ---\n"; cout<<"\nNhap Phan So A: "; A.Input(); A.Output(); cout<<"\nNhap Phan So B: "; B.Input(); B.Output(); //Phuong Thuc Gan cout<<"\n------- Phuong Thuc Gan C = A ----------\n"; C = A; cout<<"\nC = A = "; C.Output(); //Phuong Thuc Dinh Tri cout<<"\n-------- Phuong Thuc Dinh Tri ------------\n"; cout<<"\nPhan So C Co Gia Tri = "<<C.DinhTri(); //Cac Phep Toan So Sanh cout<<"\n-------- Cac Phep Toan So Sanh ------------\n"; if(A > B) cout<<"\nPhan So A > Phan So B\n"; else if(A < B) cout<<"\nPhan So A < Phan So B\n"; else if(A == B) cout<<"\nPhan So A == Phan So B\n"; //Cac Phep Toan Co Ban 2 Ngoi cout<<"\n---------- Cac Phep Toan Co Ban 2 Ngoi ----------\n"; TONG = A + B; TONG.ToiGian(); cout<<"\nTONG = A + B = "; TONG.Output(); HIEU = A + B; HIEU.ToiGian(); cout<<"\nHIEU = A - B = "; HIEU.Output(); TICH = A * B; TICH.ToiGian(); cout<<"\nTICH = A * B = "; TICH.Output(); THUONG = A / B; THUONG.ToiGian(); cout<<"\nTHUONG = A / B = "; THUONG.Output(); //Cac Phep Toan Phuc Hop cout<<"\n-------- Cac Phep Toan Phuc Hop ----------\n"; TONG += A; TONG.ToiGian(); cout<<"\nTONG += A = "; TONG.Output(); HIEU -= A; HIEU.ToiGian(); cout<<"\nHIEU -= A = "; HIEU.Output(); TICH *= A; TICH.ToiGian(); cout<<"\nTICH *= A = "; TICH.Output(); THUONG /= A; THUONG.ToiGian(); cout<<"\nTHUONG /= A = "; THUONG.Output(); //Overload Toan Tu >> & << cout<<"\n------- Overload Toan Tu >> & << --------\n"; cout<<"\nNhap Phan So D: "; cin>>D; cout<<D; cout<<"\nNhap Phan So E: "; cin>>E; cout<<E; cout<<"\n\n------------------------------KET THUC----------------------------------\n\n"; _getch(); return 0; } |
|
Sakura
Thú CƯng :
Số bài viết : 1124 Điểm : 1688 Được cảm ơn : 35 Ngày sinh : 03/11/1990 Tham gia ngày : 16/03/2010 Tuổi : 34 Đến từ : Bình Dương Ngề nghiệp : IT Student
| Tiêu đề: Re: [OOP] - Bài Tập Phân Số - Overload Toán Tử 20/7/2010, 09:09 | |
| để thử nốt cách này coi cái nào đẹp nha anh em! (Sorry Spam) [size=9] ai muốn đẹp thì down file CPP này về nha! [You must be registered and logged in to see this link.] chạy trên Visual C++ mới thấy đẹp![/size] |
|
hotboy
Thú CƯng :
Số bài viết : 705 Điểm : 1043 Được cảm ơn : 9 Ngày sinh : 21/03/1990 Tham gia ngày : 13/05/2010 Tuổi : 34 Đến từ : BDU
| Tiêu đề: Re: [OOP] - Bài Tập Phân Số - Overload Toán Tử 20/7/2010, 11:51 | |
| - Code:
-
friend ostream &operator<<(ostream &stream, PHANSO ob); friend istream &operator>>(istream &stream, PHANSO &ob); 2 cái này là gì z sao k cho thêm mấy cái chú thích cho dễ hiểu mấy bửa nay toàn học bài thi nên chưa có coi mấy cái này nên nhìn thấy chóng mặt quá [You must be registered and logged in to see this image.] |
|
Sakura
Thú CƯng :
Số bài viết : 1124 Điểm : 1688 Được cảm ơn : 35 Ngày sinh : 03/11/1990 Tham gia ngày : 16/03/2010 Tuổi : 34 Đến từ : Bình Dương Ngề nghiệp : IT Student
| Tiêu đề: Re: [OOP] - Bài Tập Phân Số - Overload Toán Tử 20/7/2010, 13:13 | |
| đó là cách để Overload toán tử cin>> và cout<< đó mà, ta phải kết hợp cả class PHANSO và cái lớp IO nữa mới đc - đó là lý do dùng hàm bạn, mới tham khảo thôi, cô chưa dạy nên nhiều khi mình nói không chính xác lắm! |
|
Sponsored content
| Tiêu đề: Re: [OOP] - Bài Tập Phân Số - Overload Toán Tử | |
| |
|