intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

KỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - Chương 5

Chia sẻ: Đặng Duy Nhật | Ngày: | Loại File: PDF | Số trang:10

132
lượt xem
27
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo dành cho giáo viên, sinh viên chuyên ngành công nghệ thông tin - Giáo trình lập trình hướng đối tượng.

Chủ đề:
Lưu

Nội dung Text: KỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - Chương 5

  1. MỤC TIÊU LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG • Nắm rõ hơn về các trường hợp tạo đối tượng. Chương 5: • Hiểu và sử dụng con trỏ this TẠO ĐỐI TƯỢNG • Hiểu được khái niệm static, viết một vài chương trình sử dụng biến và phương thức static. • Nắm vững khái niệm và cách sử dụng hàm friend Giáo viên: Võ Hồng Bảo Châu Khoa CNTT trường ĐH Lạc Hồng OOP-CHƯƠNG 5-TAO DOI TUONG 2 NỘI DUNG CHI TIẾT TẠO 1 ĐỐI TƯỢNG BẰNG CÁCH KHAI BÁO BIẾN • CÁCH KHAI BÁO BIẾN • Dùng phương thức thiết lập chuẩn • CÁCH CẤP PHÁT BỘ NHỚ Ví dụ: • ĐỐI TƯỢNG LÀ THÀNH PHẦN CỦA LỚP VECTOR a; • CON TRỎ THIS • Sử dụng phương thức thiết lập có tham số • LỚP CÓ DỮ LIỆU STATIC Ví dụ: • HÀM FRIEND VECTOR a(10), b(10,3.5); • CON TRỎ THIS • Tạo đối tượng từ đối tượng đã có – Tạo bản sao Ví dụ: VECTOR a; VECTOR a; VECTOR b = a; VECTER b(a) OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 3 4 1
  2. Đối tượng là thành phần của lớp TẠO NHIỀU ĐỐI TƯỢNG BẰNG CÁCH KHAI BÁO BIẾN • Sử dụng phương thức thiết lập chuẩn • Đối tượng có thể là thành phần của đối tượng khác, khi m ột đối tượng thuộc lớp “lớn” được tạo ra, các thành phần Ví dụ: của nó cũng được tạo ra. Phương thức thiết lập (nếu có) sẽ được tự động gọi cho các đối tượng thành phần. VECTOR a[5]; • Nếu đối tượng thành phần phải được cung cấp tham số khi • Sử dụng phương thức thiết lập có một tham số thiết lập thì đối tượng kết hợp (đối tượng lớn) phải có Ví dụ: phương thức thiết lập để cung cấp tham số thiết lập cho các đối tượng thành phần. VECTOR a[2]={10,20}; • Sử dụng phương thức thiết lập nhiều tham số Ví dụ: VECTOR a[2]={VECTOR(10,3.5),VECTOR(20,1.6}; OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 5 6 VÍ DỤ Đối tượng là thành phần của lớp class Diem{ • Cú pháp để khởi tạo đối tượng thành phần là dùng dấu hai chấm (:) theo sau bởi tên thành phần và tham số khởi tạo. double x,y; public: • Khi đối tượng kết hợp bị huỷ đi thì các đối tượng thành phần của nó cũng bị huỷ đi, nghĩa là phương thức huỷ bỏ Diem(double xx, double yy) {x = xx; y = yy;} sẽ được gọi cho các đối tượng thành phần, sau khi // ... phương thức huỷ bỏ của đối tượng kết hợp được gọi. }; class TamGiac{ Diem A,B,C; public: // ... }; void main(){ TamGiac t; // Bao sai OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 7 8 2
  3. class Diem Đối tượng là thành phần của lớp VÍ DỤ { double x,y; public: Diem(double xx, double yy {x = xx; y = yy;} • Khi đó trình tự thực hiện của các phương thức thiết lập và // ... KHỞI TẠO ĐỐI }; phương thức hủy bỏ theo quy tắc sau: Đối tượng thành TƯỢNG THÀNH phần – Phương thức thiết lập của các lớp thành phần được thực hiện class TamGiac PHẦN, DÙNG DẤU trước phương thức thiết lập của lớp { HAI CHẤM Diem A,B,C; – Phương thức hủy bỏ của lớp thành phần thực hiện sau phương public: thức hủy bỏ của lớp, TamGiac(double xA, double yA, double xB, double yB, double xC, double yC):A(xA,yA),B(xB,yB),C(xC,yC){} – Trong các thành phần của lớp, thành phần nào được khai báo void Ve() const; trước, phương thức thiết lập sẽ thực hiện trước. // ... – Trong các thành phần của lớp, thành phần nào được khai báo }; trước, phương thức hủy bỏ sẽ thực hiện sau. void main(){ TamGiac t(100,100,200, 400,300,300); } OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 9 10 ĐỐI TƯỢNG LÀ THÀNH PHẦN CỦA MẢNG Ví dụ class SEQUENCE{ • Sử dụng mảng các đối tượng là một cách tiếp cận truyền thống. double data; • Tuy nhiên, public: – Có thể sử dụng mảng các đối tượng của lớp ngay chính trong lớp SEQUENCE(); SEQUENCE( SEQUENCE*, int ); void reorder( SEQUENCE*, int ); void out( SEQUENCE*, int ); }; OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 11 12 3
  4. Từ đó class MAIN{ void main() SEQUENCE *u; public: { MAIN( int = 2 ); ~MAIN(); MAIN object(5); }; MAIN::MAIN( int size ){ } u = new SEQUENCE[size]; SEQUENCE a(u,size); a.reorder( u, size ); a.out( u, size ); } MAIN::~MAIN(){ delete []u; } OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 13 14 class String { class Diem { char *p; TẠO MẢNG double x,y; public: public: String(char *s) {p = strdup(s);} Diem(double xx, double yy): x(xx), String(const String &s) {p = strdup(s.p);} y(yy) {} ~String() { TẠO PTỬ 1 TẠO PTỬ 2 TẠO PTỬ 3 … void Set(double xx, double yy) {x = cout
  5. class Diem class String class String class Diem { { { { double x,y; char *p; char *p; double x,y; public: public: public: public: Diem(double xx = 0, double yy = String(char *s = “”) {p = strdup(s);} String(char *s) {p = strdup(s);} Diem(double xx, double yy): x(xx), 0):x(xx), y(yy){} String(const String &s) {p = strdup(s.p);} String() {p = strdup(“”);} y(yy){} void Set(double xx, double yy) {x = ~String() {cout
  6. CẤP VÀ HỦY NHIỀU ĐỐI TƯỢNG CẤP VÀ HỦY NHIỀU ĐỐI TƯỢNG class String • Trong trường hợp cấp nhiều đối tượng, ta không thể cung Khi đó mọi phần tử được cấp đều được { cấp tham số cho từng phần tử được cấp: khởi động với cùng giá trị char *p; int *pai = new int[10]; public: • int *pai = new int[10]; Diem *pad = new Diem[5]; String(char *s = "Alibaba") {p = strdup(s);} // ca 5 diem co cung toa do (0,0) String(const String &s) {p = strdup(s.p);} • Diem *pad = new Diem[5]; // Bao sai String *pas = new String[5]; ~String() {delete [] p;} // Ca 5 chuoi cung duoc khoi dong bang //... • String *pas = new String[5]; // Bao sai “Alibaba” }; • Việc huỷ nhiều đối tượng được thực hiện class Diem • Lỗi trên được khắc phục bằng cách cung cấp phương thức bằng cách dùng { delete và có thêm dấu [] ở trước. thiết lập để đối tượng có khả năng tự khởi tạo. double x,y; – delete [] pas; public: – delete [] pad; Diem(double xx, double yy):x(xx),y(yy){}; – delete [] pai; Diem():x(0),y(0){}; //... } OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 21 22 CON TRỎ THIS VÍ DỤ • Mỗi đối tượng có một con trỏ chỉ đến bản thân nó gọi là con trỏ this. • Lưu trữ địa chỉ của đối tượng đang tác động. • Tham chiếu đến đối tượng đang gọi hàm thành phần. • Khi viết y=1 tương đương this->y=1 hoặc (*this).y=1 Class VIDU{ int n; public: int PhuongThuc(int); t=? }; Int VIDU::PhuongThuc(int n){ this->n=n //chẳng lẽ viết n=n; return (*this).n+n+5; } //(*this).n là dữ liệu thành viên của lớp OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 23 24 6
  7. Lớp có dữ liệu static Thay a bằng bất • Nhằm để các đối tượng của lớp cùng chia sẻ vùng bộ nhớ kỳ đối tượng nào, kết quả cũng như • Dữ liệu static còn gọi là thành viên tĩnh của lớp. nhau • Trong ngôn ngữ lập trình hướng đối tượng, loại thành viên này thường được gọi là biến lớp (class variables) • Từ đó có thể sử dụng nó mà không cần tạo đối tượng thuộc lớp. • Do các đối tượng cùng nhau chia sẻ biến static này, nên nó phải được khai báo như biến toàn cục Biến count được khai báo static để liên hệ các đối tượng • Giống như 2 người (2 đối tượng) hùn tiền mua 1 món đồ với nhau. Mỗi lần tạo 1 đối tượng thì biến count tăng 1, nên 2 người có thể xài chung món đồ đó hủy 1 đối tượng thì biến count giảm 1. OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 25 26 static Lớp có phương thức • Phương thức static là phương thức có thể gọi thực hiện ngay cả khi chưa tạo đối tượng thuộc lớp. • Phương thức static là phương thức để cho các đối tượng Phương thức của lớp cùng chia sẻ. static, các đối tượng của lớp • Chẳng hạn, như trong ví dụ trên, phương thức cùng chia sẻ numberPerson(). Không cần chỉ định đối tượng cũng có thể gọi được hàm static OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 27 28 7
  8. BÀI TẬP TẠI LỚP BÀI TẬP TẠI LỚP  Xem chương trình sau, cho biết những gì sẽ xuất ra màn hình khi chạy chương Cho đoạn chương trình sau: trình: main(){ int a=1, b=2; class test{ cout
  9. Hàm tự do là friend của 1 lớp Hàm kt_trung là hàm tự do (không Hàm kt_trung là hàm tự do (không thuộc class nào) nhưng là bạn thuộc class nào) nên không thể truy (friend) của class point nên có thể cập vào thành phần private (x và y) truy cập vào thành phần private (x của class point và y) của class point OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 33 34 Hàm bạn của nhiều lớp Hàm thành phần của một lớp là bạn của một lớp khác class A; Vậy hàm f của Hàm f muốn Hàm f muốn class B class A{ B phải được A truy xuất thành truy xuất thành { …. coi như bạn phần private phần private …. friend void f(A,B) (friend) và protect của và protect của int f(….) …. void f(A,B) class A class A và B …. }; }; class B{ class A … { friend void B f(A,B); … … friend int B::f(…); }; class B … void f(A,B){ class A { }; ……. { … class A class B int B::f(….) //truy xuất thành phần … int f(….); { { { riêng của 2 lớp A và B } … … … ……. } } } } } OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 35 36 9
  10. Tất cả các hàm thành phần của một lớp là bạn của một lớp khác class A{ • Khi không những chỉ một hàm nào đó, mà các hành vi của lớp được quyền truy cập đến những thành viên có thuộc //... tính private, protected của một lớp khác • Chẳng hạn, các hành vi của lớp A, muốn truy cập những public: thành viên private, protected của lớp B, thì trong lớp B phải friend class B; mô tả lớp A có thuộc tính là friend. //... }; class B{ //... }; OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 37 38 TÓM TẮT • Tạo đối tượng giống như khai báo biến. Đối tượng có thể là thành phần của lớp hoặc thành phần của mảng. • Cú pháp để khởi tạo đối tượng thành phần là dùng dấu hai chấm (:) theo sau bởi tên thành phần và tham số khởi tạo. • Mỗi đối tượng có một con trỏ chỉ đến bản thân nó gọi là THANK YOU con trỏ this. Con trỏ này có thể sử dụng tường minh hoặc ngầm định. • Thành phần dữ liệu tĩnh thể hiện các thông tin dùng chung trong tất cả các đối tượng thuộc lớp. Khai báo thành phần tĩnh bắt đầu bằng từ khóa static. • Hàm friend của một lớp là hàm không thuộc lớp nhưng có quyền truy cập đến các thành phần private của lớp. Khai báo friend có thể đặt bất kỳ nơi nào trong khai báo lớp. OOP-CHƯƠNG 5-TAO DOI TUONG OOP-CHƯƠNG 5-TAO DOI TUONG 39 40 10
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2