// Phân số .h
#pragma once
#include<iostream>
using namespace std;
class Phan_So
{
private:
int tuso,mauso;
public:
// hàm khởi tạo mặc định
Phan_So(void);
// hàm khởi tạo có tham số
Phan_So(int ,int );
// hàm sao chép
void xuat();
Phan_So(const Phan_So &);
// hàm tính tổng 2 phân số theo cách thông thường
Phan_So tinh_tong(Phan_So);
/// bây giờ ta qua operator cộng này là cộng giữa 2 phan số với nhau
Phan_So operator+(Phan_So);
// bây giời ta qua cộng giữa 1 phân số với 1 số nghuyên
Phan_So operator+(int );
// khai báo getter tu so
int Getter_tuso();
int Getter_mauso();
void Stter_tuso(int );
void Stter_mauso(int );
//// còn có 1 cách khác nữa đó là ta dùng từ khóa friend
// friend là 1 từ khóa có chức năng sử dụng lại dữ liệu cũa lớp đó mà hàm ko thuộc về cái lớp đó
// ta làm như sau
friend Phan_So operator+(int ,Phan_So);
// hàm hủy
~Phan_So(void);
};
/// ta đã trở lại
///bây giờ là khác nhé !
// phận số + 1 số nghuyên ta có rồi bây giờ là 1 số nguyên cộng vời 1 phân số bạn nhe
// cái này nó nằm ngoài ;lớp rồi nên ta khai báo như sau tại sao phải nằm ngoài lớp
// ta giải thich như sau
// Phan_So operator+(int ); đây là ta khai báo lấy cái hiện tại mà cái hiện tại là cái phân số rồi operator cong int
// còn bây jo ta lấy cái hiện tại là số nguyên mà cái hiện tại ta phải khai báo nằm ngoài cái lớp
// ta làm như sau
// đầu tiên ta phải getter _setter cái tu va mẩu cho nó bdieu62 này thật phức tạp và rắc rối mà tự làm khó mình đúng ko ak !
// có 1 câu hỏi đặt ra là tại sao mình ko khai báo public tuso,mauso; cho no lun tội j phải khai bao private khổ vậy
// trả lời là : bây giờ ta moi về OOP nên ban nên làm wen điều đó làm như bạn cũng được thoi! nhưng ma mình muốn ban làm quen cái getter setet đó co1` thể bảo mật dữ liệu cho ban ! ban hiểu hok ! tùy bạn thuj ban muốn làm cacvh1 nào cũng dk nhưng đây là tính ;chất cũa OOP đó bán
Phan_So operator+(int ,Phan_So);
// phân số .cpp
#include "Phan_So.h"
//khởi tạo mặc định
Phan_So::Phan_So(void)
{
tuso=0;
mauso=1;
}
Phan_So::Phan_So(int a,int b)
{
tuso=a;
mauso=b;
}
void Phan_So::xuat()
{
cout<<endl;
cout<<tuso<<"/"<<mauso;
}
Phan_So Phan_So::tinh_tong(Phan_So p)
{
Phan_So tong(tuso*p.mauso+mauso*p.tuso,mauso*p.mauso);
return tong;
}
/// hàm tính tổng 2 phân số theo kiểu operator
Phan_So Phan_So::operator+(Phan_So a )
{
Phan_So tong(tuso*a.mauso+mauso*a.tuso,mauso*a.mauso);
return tong;
}
// bây giờ ta qua cộng 1 phân số với 1 số nguyen ban nhé
Phan_So Phan_So::operator+(int a)
{ // cách 1 là dùng cái này pro
Phan_So b(a,1);
return *this+b;
/// ta có thể dùng cách 2 như sau
/*Phan_So tong;
tong.tuso=tuso+mauso*a;
tong.mauso=mauso;
return tong;
*/
}
// khai báo 4 hàm getter_ setter tu va mau số
int Phan_So::Getter_tuso()
{
return tuso;
}
int Phan_So::Getter_mauso()
{
return mauso;
}
void Phan_So::Stter_tuso(int ts)
{
tuso=ts;
}
void Phan_So::Stter_mauso(int ms)
{
mauso=ms;
}
// bây giờ là phương thức so nguyên cộng với phân số ban nhé
Phan_So operator+(int a,Phan_So ps)
{
// ta đã có 1 cái operator phan so cong+ so nguyên ở tren rồi
//return ps+a;// cái này có tính chât giao hoán nên cộng lại được bạn nhé
// nếu như mà phép trứ thì không bao giờ được ban nhé
// nếu như ta không thich dùng cái như tôi cũng dk bvn5 có thể dùng
Phan_So tongi;
tongi.Stter_tuso(a*ps.Getter_mauso()+ps.Getter_tuso());
tongi.Stter_mauso(ps.Getter_mauso());
return tongi;
}
/// phương thức sử dụng friend
Phan_So operator+(int a,Phan_So ps)
{
// như trên
// return ps+a;
// lúc này ta truy xuất đến thuộc tính phan so ma ko bi loi nua ban nhe 1
Phan_So tong;
tong.tuso=a*ps.mauso+ps.tuso;
tong.mauso=ps.mauso;
return tong;
// nhưng diều lưu ý đối với hàm này thji ta phải nằm trong class chính no lun lan nhé tức là bạn phai khai bao nằm trong class phan_so
}
// hàm sao chép
Phan_So::Phan_So(const Phan_So &a)
{
tuso=a.tuso;
mauso=a.mauso;
}
Phan_So::~Phan_So(void)
{
}
// main()
#include"Phan_So.h"
int main()
{
Phan_So a(1,2),b(3,4),c(5,6),d(6,7);
Phan_So tong1;
// đây là cách thông thường ta từng làm bây jo72 ta qua operator nhé
tong1=a.tinh_tong(b).tinh_tong(c).tinh_tong(d);
tong1.xuat();
cout<<endl;
Phan_So tong2 =a+b+c+d;// đây là cái operator cài đặt nó chẳng khác j là cài thông thường bạn nhé
// khà khà
tong2.xuat();
cout<<endl;
// bây giờ ta qua phần + với 1 số nguyên
//
Phan_So tong3=a+5;
tong3.xuat();
// thật chất nãy giờ ak ! là ta đang làm theo cơ chế nạp chồng toán tử đó bạn (operator overaloading)
// như máy cái hàm khời tạo tham cố mặc định khời tạo tham số trung62 vào nó cũng làm theo cơ chế nạp chồng hàm đó bạn (function overaloading)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// bay giờ ta qua phan 1 số nguyên cộng với 1 phân số bạn nh;é
Phan_So tog;
tog=3+a;
tog.xuat();
system("pause");
return 0;
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.