• Nạp chồng toán tử là định nghĩa lại các toán tử cho các kiểu dữ liệu người dùng định nghĩa... • Ví dụ:Xây dựng lớp phân số.. Nạp chồng toán tử + để cộng hai phân số... Hàm nạp chồng
Trang 2• Các toán tử: +,-,*, /,…
• Các phép toán chỉ thực thi được với các kiểu dữ liệu cơ bản.
• Nạp chồng toán tử là định nghĩa lại các toán tử cho các kiểu dữ liệu người dùng định nghĩa.
Trang 3Cú pháp:
<kiểu trả về> operator <tên toán tử>([ds tham số])
Định nghĩa ngoài lớp:
<kiểu trả về><tên_lớp>::operator<tên toán tử>([ds tham số])
{
//thân hàm
}
Trang 4• Ví dụ:
Xây dựng lớp phân số Nạp chồng toán tử + để cộng hai phân số.
Trang 5class phanso
{
int ts,ms;
public:
phanso operator +(phanso p);
};
phanso phanso::operator+(phanso p)
{
phanso kq;
kq.ts=ts*p.ms+ms*p.ts;
kq.ms=ms*p.ms;
return kq;
}
Trang 6Cách gọi hàm toán tử:
Dùng như cú pháp thông thường của phép toán
Ví dụ: PS a,b,c; c=a+b;
Dùng như hàm thành phần của đối tượng
Ví dụ:
PS a,b,c;
c=a.operator+(b);
Trang 7 Chú ý:
như:
Trang 8 Ví dụ
Xây dựng lớp số phức.
phức.
Hàm nạp chồng là hàm thành viên
Hàm nạp chồng là hàm không thành viên.
Trang 9 Có hai cách xây dựng hàm nạp chồng:
Chú ý: Khi hàm nạp chồng là hàm không thành viên khi đó không phải là phương thức của lớp, nên nếu định nghĩa ngoài lớp sẽ không có tên của lớp đi kèm
Trang 10 sp3=sp1*sp2.
Chương trình hiểu là
sp3=sp1.operator*(sp2).
Chú ý: Thứ tự của đối số khi truyền.
Trang 11• Để nạp chồng toán tử << phải có một toán hạng trái của kiểu ostream & (như là cout
trong biểu thức cout<<X), vì thế nó phải là hàm không thành viên.
• Cú pháp:
ostream & operator << (ostream & stream, ClassName Object)
Tham số thứ nhất là một tham chiếu đến dòng xuất ostream, tham số thứ hai là đối tượng được chèn vào dòng
• Ví dụ:
friend ostream& operator<<(ostream&, SoPhuc s);
• Tương tự với toán tử >>
Trang 12• Các toán tử: +,-,*,\,>,<
▫ Là hàm thành viên: có một tham số truyền vào.
▫ Hàm không thành viên: Có hai tham số truyền vào (một trong hai tham số này phải
là một đối tượng hoặc là một tham chiếu đến đối tượng của lớp.
Trang 13• Các toán tử: - ,++, (lấy đảo dấu)
• Nạp chồng toán tử một ngôi:
▫ Hàm thành viên: không có tham số
▫ Hàm không thành viên: có một tham số.
Trang 14• Toán tử []
• Toán tử ()
• Toán tử chuyển đổi kiểu
• Nạp chồng toán tử new và delete.
(Tài liệu Lê Thị Mỹ Hạnh – trang 90)
Trang 15class Employee
{
private:
int idNum;
double salary;
public:
Employee(int, double);
double operator+ (Employee);
};
Employee::Employee(int id, double sal)
{
idNum = id;
salary = sal;
}
double Employee::operator+(Employee emp)
{
double total;
total = salary + emp.salary;
return total;
}
Employee clerk(1234, 400.00);
Employee driver(3456, 650.00);
double sum;
sum = clerk.operator+(driver);
cout << "Using operator+() function - Sum is $" << sum << endl;
sum = clerk + driver;
cout << "Adding clerk to driver - Sum is $" << sum << endl;
return 0;
}
15
Trang 16là hàm bạn
Trang 17liên tiếp các phép +
Trang 18tử <<
Trang 19chồng toán tử >>