1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng ngôn ngữ lập trình c chương 13 toán tử trên lớp

12 324 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 88,62 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Toán tử Trong C++, có thể định nghĩa chồng đối với hầu hết các toán tử một ngôi hoặc hai ngôi trên các lớp, nghĩa là một trong các toán hạng tham gia phép toán là các đối tượng..  Toán

Trang 1

CHƯƠNG 13: TOÁN TỬ TRÊN LỚP

• Nội dung

Toán tử

Hàm toán tử

Định nghĩa chồng toán tử gán “=“

Định nghĩa chồng toán tử tăng/giảm ”++“/”—”

Định nghĩa chồng toán tử “[]”

Định nghĩa chồng toán tử “<<” và “>>”

Trang 2

Toán tử

 Trong C++, có thể định nghĩa chồng đối với hầu hết các toán tử (một ngôi hoặc hai ngôi) trên các lớp, nghĩa là một trong các toán hạng tham gia phép toán là các đối tượng

 Toán tử được định nghĩa chồng bằng cách định nghĩa một hàm toán tử với

tên bao gồm từ khóa operator và theo sau là ký hiệu toán tử cần định nghĩa

chồng

Ví dụ 1: Một số ví dụ về tên hàm toán tử

• operator+ định nghĩa phép cộng

• operator- định nghĩa phép trừ

• operator* định nghĩa phép nhân

• operator/ định nghĩa phép chia

• operator+= định nghĩa phép cộng bằng

• operator!= định nghĩa phép so sánh khác

Trang 3

Hàm toán tử

• Hàm toán tử có thể là hàm thành phần hoặc hàm bạn của lớp Khi hàm toán

tử là hàm thành phần của lớp thì toán hạng thứ nhất trong hàm toán tử luôn

là một đối tượng thuộc lớp đó Nếu toán hạng thứ nhất trong hàm toán tử không phải là một đối tượng của lớp thì hàm toán tử phải là hàm bạn của lớp

Ví dụ 2:

• class SoPhuc

• {

• private:

• float re, im; //phần thực và phần ảo

• public:

• SoPhuc(float re = 0; float im = 0); void Xuat();

• //Hàm toán tử cộng hai đối tượng Sophuc

• SoPhuc operator+(SoPhuc u); // Hàm thành phần lớp

• /*Hàm toán tử cộng một số thực với phần thực của một đối tượng

SoPhuc*/

• friend SoPhuc operator+(float x, SoPhuc v); //Hàm bạn

Trang 4

• //Định nghĩa các hàm thành phần

• SoPhuc::SoPhuc(float im1, float re1)

• {

• im = im1; re = re1;

• }

• SoPhuc SoPhuc::oprator+(SoPhuc u)

• {

• cout << “Goi hàm toán tử thành phần operator+\n”;

• SoPhuc res(re + u.re, im + u.im); //Gọi hàm thiết lập hai đối số

• return res;

• }

• void SoPhuc::Xuat()

• {

• cout << re << (im >= 0 ? “+” : “-”) << fabs(im) << “*i\n”;

• }

Trang 5

• //Định nghĩa hàm tự do

• SoPhuc operator+(float x, SoPhuc u)

• { cout << “Goi hàm toán tử tự do operator+\n”;

• SoPhuc res(x + u.re, u.im);

• return res;

• }

• //Hàm chính

• void main()

• { SoPhuc a(-2, 4);

SoPhuc b(8, -6);

• SoPhuc c = a + b; // CT dịch hiểu c = a.operator+(b)

• SoPhuc d = 4 + c; // CT dịch hiểu c = operator+(4, c)

• SoPhuc e = a + b + c; // e = (a.operator+(b)).operator+(c)

Trang 6

Định nghĩa chồng phép gán

 Hàm toán tử gán luôn là hàm thành phần của lớp

 Việc định nghĩa chồng phép gán chỉ cần thiết khi các đối tượng có các

thành phần dữ liệu động

 Giá trị trả về của hàm toán tử gán được chọn là tham chiếu đến đối tượng đứng bên trái phép gán nhằm giũ hai tính chất quan trong của phép gán: trật

tự kết hợp tử bên phải sang bên trái và có thể sử dụng kết quả biểu thức gán trong các biểu thức khác

Ví dụ 3:

• class Vector

• {

• private:

• public:

• Vector& operator=(Vector &u);

• };

Trang 7

• Vector& Vector::operator=(Vector &u)

• {

• cout <<“goi ham toan tu gan\n”;

• if(this != &u) {

• delete[]a; /*xóa vùng nhớ động đã có trong đối tượng vế

trái*/

• u.a = new float[n]; /*cấp phát vùng nhớ mới có kích thước

như trong u*/

• for(i = 0; i < n; i++)

• else cout <<“ Hai doi tuong trong phep gan la mot\n”;

• return *this;

• }

Trang 8

• void main()

• {

• Vector b = a; //Gọi hàm thiết lập sao chép

• c = b; //Gọi hàm toán tử gán

• }

Trang 9

Định nghĩa chồng toán tử “<<“ và “>>”

• Việc định nghĩa chồng hai toán tử “<<“ và “>>” sẽ cho phép các đối tượng đứng bên phải chúng khi thức hiện các thao tác nhập xuất

Ví dụ 4:

• class SoPhuc

• {

• private:

• float im, re;

• public:

• friend ostream& operator<<(ostream &os, SoPhuc &u);

• firend istream& operator>>(istream &is, SoPhuc &u);

• };

Trang 10

• //Định nghĩa hàm tự do

• ostream& operator<<(ostream &os, SoPhuc &u)

• {

• cout << “Nhap phan thuc va phan ao:”;

• os << u.re << u.im;

• }

• istream& operator>>(istream &os, SoPhuc &u)

• {

• is << u.re << (u.im >= 0 ? “+” : “-”) << u.im <<“*i\n”;

• }

• //Hàm chính

• void main()

• {

• cin << a;

• cout << a;

• }

Trang 11

Chú ý:

• Các toán hạng bên trái của các toán tử << và >> là các đối tượng thuộc lớp

ostream và istream chứ không phải thuộc lớp SoPhuc nên không thể định

nghĩa chồng các toán tử này như là hàm thành phần, mà phải được định nghĩa như là hàm bạn

Ngày đăng: 03/12/2015, 18:57

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm