bài 4-nạp chồng toán tử_lập trình hướng đối tượng
TRANSCRIPT
![Page 1: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/1.jpg)
ĐỨCApril 13, 2023
CHƯƠNG II:
2.10 NẠP CHỒNG TOÁN TỬ
![Page 2: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/2.jpg)
April 13, 2023 2
NỘI DUNG:
Định nghĩa Cú pháp khai báo toán tử Phân loại hàm toán tử Toán tử chuyển đổi kiểu
![Page 3: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/3.jpg)
April 13, 2023 3
Nạp chồng toán tử là khả năng định nghĩa các hàm thành phần của lớp dưới dạng các hàm toán tử
Các toán tử cùng tên thực hiện được nhiều chức năng khác nhau được gọi là nạp chồng toán tử
Ví du:
PS operator - (PS y );
friend PS operator - ( PS x , PS y );
I. Định nghĩa:
![Page 4: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/4.jpg)
April 13, 2023 4
II. Khai báo hàm toán tử
•Hàm toán tử được định nghĩa trong vị trí public của phần khai báo lớp.
trong đó: return-type: kiểu trả lại kết quả của hàm toán tử #: tên toán tử cần định nghĩa (+,-,*,/,…)
* Khai báo tổng quát:
<return-type> operator # (d/s đối số);
* Định nghĩa tổng quát:
<return-type> operator # ( d/s đối số )
{
//Định nghĩa hàm toán tử
}
![Page 5: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/5.jpg)
April 13, 2023 5
Toán tử độc lập: Không thuộc lớp nào. Ngôi của toán tử là số tham số truyền vào.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
bool operator >(const PhanSo &p1, const PhanSo &p2);
Toán tử thuộc lớp: Là phương thức của lớp. Ngôi của toán tử: đối tượng của lớp + số tham số.
PhanSo PhanSo::operator +(const PhanSo &p);
bool PhanSo::operator >(const PhanSo &p);
Cách sử dụng 2 loại là như nhau!!
III. Phân loại hàm toán tử
![Page 6: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/6.jpg)
April 13, 2023 6
Hàm thành phần: hàm này không có đối số cho toán tử một ngôi hay có một đối số cho toán tử hai ngôi tương tự hàm thành phần thông thường Hàm bạn: hàm có một đối số cho toán tử một ngôi và hai đối số cho toán tử hai ngôi. Hàm được khai báo thêm từ khóa friend trước tên hàm tương tự hàm bạn
III. Phân loại hàm toán tử
![Page 7: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/7.jpg)
April 13, 2023 7
* Quy tắc sử dụng toán tử
Loại Khai báo Sử dụng
Thành phần
type operator #();a.operator #();
hoặc #a;
type operator #(type b);a.operator #(b);
hoặc a#b;
Hàm bạn
friend type operator #(type a); #a
friend type operator #(type a, type b); a#b
Trong đó: # là toán tử cần định nghĩa
![Page 8: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/8.jpg)
April 13, 2023 8
* Ví dụ:
Loại Khai báo Sử dụng
Thành phần
PS operator -();kq = a.operator-();
hoặc kq = -a;
PS operator -( PS b);kq = a.operator -(b);
hoặc kq = a-b;
Hàm bạn
friend PS operator -(PS a); kq = -a
friend PS operator - (PS a, PS b); kq = a - b
Trong đó: # là toán tử cần định nghĩa
![Page 9: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/9.jpg)
April 13, 2023 9
Ưu điểm: Thực hiện toán tử trên kiểu dữ liệu tự định nghĩa.
PhanSo p1, p2; HocSinh h1, h2;
PhanSo p3 = p1 + p2; if (h1 > h2)
h1++;
Hạn chế: Không thể tạo toán tử mới. Không thể định nghĩa lại toán tử trên kiểu cơ bản. Ngôi của toán tử giữ nguyên. Độ ưu tiên của toán tử không đổi.
Ưu nhược điểm
![Page 10: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/10.jpg)
10
Hàm toán tử
Toán tử có thể định nghĩa lại:NgôiNgôi NhómNhóm Toán tửToán tử
1 Ngôi (Unary)1 Ngôi (Unary) Tăng giảmTăng giảm ++, --++, --
Dấu số họcDấu số học +, -+, -
LogicLogic !!
Con trỏCon trỏ *, &*, &
Ép kiểuÉp kiểu int, float, double, …int, float, double, …
2 Ngôi (Binary)2 Ngôi (Binary) Số họcSố học +, -, *, /, %, +=, -=, *=, /=, %=+, -, *, /, %, +=, -=, *=, /=, %=
So sánhSo sánh >, <, ==, >=, <=, !=>, <, ==, >=, <=, !=
LogicLogic &&, ||&&, ||
Nhập xuấtNhập xuất <<, >><<, >>
GánGán ==
Lấy chỉ số mảngLấy chỉ số mảng [ ][ ]
![Page 11: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/11.jpg)
11
Hàm toán tử
Toán tử không thể định nghĩa lại:
Toán tửToán tử Ý nghĩaÝ nghĩa
.. Truy xuất phần tửTruy xuất phần tử
:::: Toán tử ::Toán tử ::
? :? : Toán tử điều kiệnToán tử điều kiện
## Chỉ thị tiền xử lýChỉ thị tiền xử lý
# ## # Chỉ thị tiền xử lýChỉ thị tiền xử lý
![Page 12: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/12.jpg)
April 13, 2023 12
* Ví dụ áp dụng:
Viết chương trình xây dựng lớp Phân số. Yêu cầu định nghĩa các hàm:
-Nhập và xuất phân số
-Hàm toán tử + để tính tổng hai phân số
-Hàm toán tử - để tính hiệu hai phân số (friend)
-Áp dụng nhập vào hai phân số và in ra kết quả
![Page 13: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/13.jpg)
April 13, 2023 13
#include…class ps{
int ts, ms;public:
//dinh nghia ham nhap xuatvoid nhap();void in();//dinh nghia toan tu +, -ps operator+(ps b);
friend ps operator-(ps a, ps b);};
![Page 14: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/14.jpg)
April 13, 2023 14
void ps::in(){
if(ms==1) cout<<ts;else {
if(ts==0) cout<<"0";else cout<<ts<<"/"<<ms;
}}
![Page 15: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/15.jpg)
April 13, 2023 15
void ps::nhap(){
cout<<"\n";cout<<"Nhap tu so:"; cin>>ts;cout<<"Nhap mau so:"; cin>>ms;if (ms<0){
ts=-ts;ms=-ms;
}}
![Page 16: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/16.jpg)
April 13, 2023 16
ps ps::operator+(ps b){
ps kq;kq.ts = ts*b.ms+b.ts*ms;kq.ms = ms*b.ms;return kq;
}
![Page 17: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/17.jpg)
April 13, 2023 17
ps operator-(ps a,ps b){
ps kq;kq.ts = a.ts*b.ms-b.ts*a.ms;kq.ms = a.ms*b.ms;return kq;
}
![Page 18: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/18.jpg)
April 13, 2023 18
void main(){
ps x,y,kq;cout<<"Nhap phan so thu nhat: \n";x.nhap();cout<<"\n\n Nhap phan so thu hai:\n";y.nhap();kq = x+y;cout<<"\n Tong:"; kq.in();kq = x-y;cout<<"\n Hieu:"; kq.in();getch();
}
![Page 19: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/19.jpg)
April 13, 2023 19
IV. Định nghĩa toán tử >> và <<
Cho phép định nghĩa hai toán tử nhập (>>) và xuất(<<) cho các đối tượng của lớp
Khi đó có thể sử dụng dòng cin>> và cout<< để nhập và xuất dữ liệu cho đối tượng lớp
![Page 20: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/20.jpg)
April 13, 2023 20
1. Định nghĩa toán tử xuất (<<)
Khai báo: friend ostream & operator << (ostream &out, class-name c);
Định nghĩa:ostream & operator << (ostream &out, class-name c){ //định nghĩa thao tác in các giá trị của “c” ra màn hình. Lưu ý dùng dòng out<< để xuất thay vì dùng cout<<
return out;}
![Page 21: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/21.jpg)
April 13, 2023 21
Trong đó: ostream: tham chiếu chỉ đến dòng xuất, out: tên dòng xuất tạm thời sử dụng thay cho cout class-name: là tên của lớp đối tượng cần định nghĩa toán tử xuất
![Page 22: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/22.jpg)
April 13, 2023 22
class phanso{public: int mau, tu; …. friend ostream& operator<<(ostream &out, phanso a); ….};ostream& operator<<(ostream &out, phanso a){
out<<“Phan so:”<<a.tu<<“/”<<a.mau;return out;
}
Ví dụ:
![Page 23: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/23.jpg)
April 13, 2023 23
Khai báo:friend istream & operator >> (istream &in, class-name &c);
Định nghĩa:istream & operator >> (istream &in, class-name &c){ //định nghĩa thao tác nhập các giá trị cho đối tượng “c”. Lưu ý dùng dòng in>> để nhập thay vì dùng cin>>
return in;}
2. Định nghĩa toán tử nhập (>>)
![Page 24: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/24.jpg)
April 13, 2023 24
Trong đó: istream: tham chiếu chỉ đến dòng nhập, in: tên dòng nhập tạm thời sử dụng thay cho cin class-name: là tên của lớp đối tượng cần định nghĩa toán tử nhập
![Page 25: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/25.jpg)
April 13, 2023 25
class phanso{public: int mau, tu; …. friend istream& operator>>(istream &in, phanso &a); ….};
istream& operator>>(istream &in, phanso &a){
cout<<“Nhap tu:”; in>>a.tu;cout<<“Nhap mau:”; in>>a.mau;return in;
}
Ví dụ:
![Page 26: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/26.jpg)
April 13, 2023 26
Viết chương trình xây dựng lớp số phức. Yêu cầu:-Định nghĩa toán tử nhập >> và xuất <<-Định nghĩa toán tử +, - để cộng, trừ hai số phức-Định nghĩa toán tử *, / để nhân, chia hai số phức(friend)-Định nghĩa toán tử == để so sánh hai số phức(friend)-Áp dụng nhập vào hai số phức và in ra màn hình các kết quả
* Ví dụ áp dụng:
![Page 27: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/27.jpg)
April 13, 2023 27
#include …
class sophuc
{
private:
float t; //phan thuc
float a; //phan ao
public:
friend ostream& operator<<( ostream &os , sophuc x );
friend istream& operator>>( istream &is , sophuc &x );
sophuc operator+( sophuc y );
sophuc operator-( sophuc y );
friend sophuc operator*( sophuc x, sophuc y );
friend sophuc operator/( sophuc x, sophuc y );
friend int operator==( sophuc x, sophuc y );
};
![Page 28: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/28.jpg)
April 13, 2023 28
ostream& operator<<( ostream &os , sophuc x )
{
os<<x.t;
if(x.a<0) os<<x.a<<"i";
else os<<"+"<<x.a<<"i";
return os;
}
![Page 29: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/29.jpg)
April 13, 2023 29
istream& operator>>( istream &is, sophuc &x )
{
cout<<"Nhap phan thuc:";
is>>x.t;
cout<<"Nhap phan ao:";
is>>x.a;
return is;
}
![Page 30: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/30.jpg)
April 13, 2023 30
sophuc sophuc::operator+(sophuc y )
{
sophuc kq;
kq.t = t + y.t;
kq.a = a + y.a;
return kq;
}
![Page 31: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/31.jpg)
April 13, 2023 31
sophuc sophuc::operator-(sophuc y )
{
sophuc kq;
kq.t = t - y.t;
kq.a = a - y.a;
return kq;
}
![Page 32: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/32.jpg)
April 13, 2023 32
sophuc operator*(sophuc x,sophuc y )
{
sophuc kq;
kq.t = x.t*y.t - x.a*y.a;
kq.a = x.t*y.a + x.a*y.t;
return kq;
}
![Page 33: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/33.jpg)
April 13, 2023 33
sophuc operator/(sophuc x, sophuc y )
{
sophuc kq;
kq.t = x.t*y.t + x.a*y.a;
kq.a = x.a*y.t - x.t*y.a;
return kq;
}
![Page 34: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/34.jpg)
April 13, 2023 34
int operator==( sophuc x, sophuc y )
{
float dd1,dd2;
dd1 = x.t*x.t + x.a*x.a;
dd2 = y.t*y.t + y.a*y.a;
if (dd1==dd2) return 1;
else return 0;
}
![Page 35: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/35.jpg)
April 13, 2023 35
void main()
{
sophuc a,b;
sophuc kq;
cout<<"Nhap so phuc thu nhat \n"; cin>>a;
cout<<"\n Nhap so phuc thu hai:\n"; cin>>b;
//kq=a+b;
kq=a.operator+(b);
cout<<"\n\nTong:"<<kq;
kq=a-b;
cout<<"\n\nHieu:"<<kq;
getch();
}
![Page 36: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/36.jpg)
April 13, 2023 36
V. Định nghĩa toán tử chuyển đổi kiểu
Toán tử chuyển đổi kiểu được dùng để chuyển đổi một đối tượng của lớp thành đối tượng lớp khác hoặc thành đối tượng của một kiểu dữ liệu đã có sẵn
Hàm chuyển đổi kiểu phải là hàm thành viên không tĩnh (không static) và không hàm bạn (friend)
![Page 37: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/37.jpg)
April 13, 2023 37
cú pháp:
operator <kiểu-cần-chuyển>(); ví dụ:
class date { …. public:
operator int(); //chuyển kiểu date về kiểu int
};
![Page 38: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/38.jpg)
April 13, 2023 38
* ví dụ áp dụng:
Xây dựng lớp Date. Yêu cầu:- Định nghĩa hàm toán tử nhập và xuất- Định nghĩa toán tử chuyển đổi để chuyển một giá
trị Date thành kiểu số nguyên- Áp dụng nhập vào một ngày bất kỳ và in ra số
nguyên tương ứng của ngày đó
![Page 39: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/39.jpg)
April 13, 2023 39
//Dinh nghia kieu du lieu moi co ten la Stringtypedef char *string;//Dinh nghia mang chua so ngay int ngay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//Mo ta lopclass N_Date{int d,m,y; //Ngay - Thang - Nam
public://Toan tu chuyen doi kieu, operator long();//Dinh nghia phuogn thuc nhap va xuatfriend ostream& operator<<(ostream &out, N_Date x);friend istream& operator>>(istream &in, N_Date &x);
};
![Page 40: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/40.jpg)
April 13, 2023 40
istream& operator>>(istream &in, N_Date &x){
cout<<"Ngay:"; in>>x.d;cout<<"Thang:"; in>>x.m;cout<<"Nam:"; in>>x.y;return in;
}
![Page 41: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/41.jpg)
April 13, 2023 41
ostream& operator<<(ostream &out, N_Date x){
out<<x.d<<"/"<<x.m<<"/"<<x.y;return out;
}
![Page 42: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/42.jpg)
April 13, 2023 42
N_Date::operator long(){
int s=0,i;if( y== 1900){
s=s+d;for(i=0;i<m;i++) s = s + ngay[i];
}else{
s=s+d;s=s+(y-1)*365;for(i=1900;i<y;i++)
if((i%4==0)&&(i%100!=0)) s=s+1;for(i=0;i<m;i++){
s=s+ngay[i];if((i%4==0)&&(i%100!=0)&&(i==2)) s=s+1;
}}return s;
}
![Page 43: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/43.jpg)
April 13, 2023 43
void main(){
N_Date x;long n;cout<<"Nhap ngay x: \n";cin>>x;n = long(x);cout<<"\n Ngay x = "<<x;cout<<"\n So nguyen tuong ung:"<<n;getch();
}
![Page 44: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/44.jpg)
Bài tập 1
Viết chương trình xây dựng lớp phân số, nạp chồng các toán tử sau:
Tạo lớp Phân số có các thành phần sau:
- Các thuộc tính: ts,ms;
- Hàm tạo có sử dụng tham số mặc định
- Nạp chồng các toán tử sau:
+ Toán tử cộng (+)
+ Toán tử trừ (-)
+ Toán tử nhân (*)
+ Toán tử chia (/)
+ Toán tử nhập (>>)
+ Toán tử xuất (<<)
+ Toán tử so sánh hai phân số
Yêu cầu các phân số ở dạng tối giản
April 13, 2023 44
![Page 45: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/45.jpg)
Bài tập 2
Xây dựng lớp số phức có các thành phần sau:Thành phần dữ liệu gồm: real , image
Nạp chồng các toán tử sau:
Hàm tạo có sử dụng tham số mặc định
Toán tử nhập số phức >>
Toán tử hiển thị số phức <<
Toán tử cộng hai số phức +
Toán tử cộng hai số phức -
Toán tử nhân hai số phức *
Toán tử nhân hai số phức/
Toán tử so sánh hai số phức
Viết chương trình chính nhập vào hai số phức bất kỳ để kiểm tra các hàm vừa viết và nhập vào một dãy gồm n số phức và hiển thị ra màn hình dãy số đó.
April 13, 2023 45
![Page 46: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/46.jpg)
Bài tập 3
Viết chương trình xây dựng lớp vector
Tạo một lớp vector gồm có các thành phần sau:
- Các thuộc tính : float * v; int n, static int count;
- Cấu tử không tham số // vector();
- Cấu tử hai tham số // vector(int size,int * a);
- Cấu tử sao chép // vector(vector &a);
Hàm huỷ
Nạp chồng toán tử gán
Nạp chồng toán tử []
Nạp chồng toán tử so sánh ==
Nạp chồng toán tử so sánh !=
Nạp chồng toán tử nhập >>
Nạp chồng toán tử xuất <<
Hàm lấy độ dài của vector
Hàm static đếm số vector được tạo ra // getcount();
Viết chương trình kiểm tra hàm vừa viết.April 13, 2023 46
![Page 47: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/47.jpg)
Bài tập 4
Viết chương trình xây dựng lớp string
Thành phần dữ liệu :
+ char * str, int length;
Các phương thức:
+ Cấu tử có tham số mặc định // string( char * s1=" ");
+ Cấu tử sao chép //string(string &s1);
+ Hủy tử
+ Nạp chồng toán tử gán =
+ Nạp chồng toán tử nối xâu +=
+ Nạp chồng toán tử so sánh ==, !=
+ Nạp chồng toán tử so sanh <, >
+ Nạp chồng toán tử so sanh >=, <=
+ Nạp chồng toán tử [ ]
+ Nạp chồng toán tử <<, >> bằng hàm bạn
Viết chương trình kiểm tra các phương thức vừa xây dựng.
April 13, 2023 47
![Page 48: Bài 4-Nạp chồng toán tử_Lập trình hướng đối tượng](https://reader036.vdocuments.site/reader036/viewer/2022062405/557211c0497959fc0b8f71b6/html5/thumbnails/48.jpg)
Bài tập 5
Xây dựng lớp đa thức dưới dang: 1 + 2x + 3x2
Thuộc tính : float *a; int n;
Phương thức:
+ Nạp chồng toán tử nhập >>
+ Nạp chồng toán tử xuất <<
+ Nạp chồng toán tử cộng hai đa thức
April 13, 2023 48