Xem mẫu

  1. 5/10/2013 Tài liệu tham khảo BÀI GiẢNG 1. Lập trình hướng đối tượng C++,Trần Văn LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lăng, phân viện Cô nghệ thô ti Lă hâ iệ Công hệ thông tin TPHCM, NXB Thống kê, 1996 2. Giáo trình ngôn ngữ lập trình hướng đối Giảng viên: Huỳnh Thị Thu Thủy tượng với C++, Nguyễn Chí Trung, NXB Số tiết lý thuyết: 45 Hà Nội, 2005 Số tiết thực hành: 30 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 2 Chương 1: Tổng quan về Giới thiệu lập trình hướng đối tượng • Chương 1: Tổng quan về lập trình hướng đối tượng. tượng 1. Giới thiệu ngôn ngữ C++ • Chương 2: Lớp và thực thể. 2. Lập trình hướng đối tượng là gì • Chương 3: Quá tải hàm. 3. Các ngôn ngữ và ứng dụng OOP • Chương 4: Quá tải toán tử. 4. Sự đóng kín (Encapsulation) • Chương 5: Tính thừa kế. • Chương 6: Hệ thống nhập xuất C++. C++ 5. 5 Tính đa hình (Polymorphism) • Chương 7: Sự kết nối động. 6. Tính thừa kế (Inheritance) • Chương 8: Hàm và lớp chung 7. Phương thức ảo (Virtual method) 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 3 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 4 1
  2. 5/10/2013 1. Giới thiệu ngôn ngữ C++ 1. Giới thiệu ngôn ngữ C++ (tt) b. Khai báo dữ liệu a. Các kiểu dữ liệu cơ bản  Khai báo biến - Kiểu số nguyên: int ể ố  Cú pháp: ; - Kiểu số thực: float  Ví dụ: - Kiểu số nguyên dài: long • Biến nguyên a: int a; - Kiểu kí tự: char • Biến thực x,y: float x,y; - Kiểu chuỗi: char * • Biến chuỗi st: char * st;//cấp phát bộ nhớ Hoặc char st[] ; // không cần gọi cấp (với n nguyên dương) phát bộ nhớ 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 5 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 6 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt)  Các vị trí khai báo biến  Khai báo hằng - Bắt đầu của một khối: • Cách 1: - VD: void main() const = ; { int n; …. ; float b; } - Ví dụ: - Bên ngoài hàm: - VD: int n; const float PI=3.1416; void main() { … } const max=100;//mac nhien int - Đối số hàm: const char * st=“Tin hoc”; - VD: long giaithua( int n ) { … } 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 7 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 8 2
  3. 5/10/2013 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt) c. Xuất nhập dữ liệu • Cách 2:  Lệnh xuất: Sử dụng toán tử chèn(st; //chuỗi nhập không có khoảng trắng trị khác 0 thì thực hiện gets(st); // chuỗi nhập có khoảng trắng ngược lại thực hiện . file tiêu đề stdio.h 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 11 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 12 3
  4. 5/10/2013 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt)  Ví dụ 1: Viết CT nhập vào 1 số nguyên dương.  Ví dụ 2: Viết CT nhập vào 3 số nguyên a,b,c. Cho Cho biết số đó là chẵn hay lẻ lẻ. biết giá trị số lớn nhất. g ị #include #include main() main() { int a,b,c; { int n; couta>>b>>c; coutn; if (a>b) if (n>0) ( ) if (a>c) cout
  5. 5/10/2013 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt) • Lưu đồ cấu trúc for Cấu trúc for Vào for (; ; ) { ; } Trong đó: Sai (=0) + : câu lệnh khởi tạo giá trị ban đầu cho biến chạy chạy. Đúng (0) + : điều kiện để thực hiện công việc của for. + : câu lệnh giúp làm thay đổi giá trị . Ra 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 17 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 18 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt) Ví dụ 2: Viết CT nhập số nguyên dương n. In Ví dụ 1: Viết CT in các số từ 1 đến n ra màn hình số chẵn
  6. 5/10/2013 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt) Ví dụ 3: Viết CT nhập số nguyên dương n. In ra màn hình giá trị 2 luỹ thừa n. Cấu trúc while #include #include void main() while () ể { int n; coutn; { ; } float lthua=1;  Ví dụ 1: Đoạn CT in các số từ 1 đến n. if (n>0) for (int i=1; i
  7. 5/10/2013 1. Giới thiệu ngôn ngữ C++ (tt) 1. Giới thiệu ngôn ngữ C++ (tt) Cấu trúc do…while  Ví dụ 2: Viết CT lặp lại nhiều lần việc nhập 1 số nguyên x. Việc nhập kết thúc khi x=0. Cho biết do { ; có bao nhiêu số âm và số dương đã nhập. } while (); #include void main() { int x, sd=0, sa=0;  Ví dụ 1: Đoạn CT kiểm tra việc nhập DTB với do { coutx; thang điểm 10. if (x>0) sd++; ( ) ; do { else if (x
  8. 5/10/2013 1. Giới thiệu ngôn ngữ C++ (tt) 2- Lập trình hướng đối tượng là gì e. Xây dựng hàm () ( ) • Lập trình hướng đối tượng (Object { Oriented O i t d programming - OOP) là kh i khuynh h [ return ;] hướng lập trình lấy đối tượng làm nền } tảng để xây dựng thuật giải xây dựng  Ví dụ: Khai báo và định nghĩa hàm sau: chương trình. Hàm tính n giai thừa: • Thực chất đây không phải là 1 phương long gthua(int n) { …. } pháp lập trình mới mà là một cách nhìn Hàm nhập dãy n số thực mới trong lập trình. void nhapday2 (float a[ ], int n) { ….. } 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 29 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 30 2- Lập trình hướng đối tượng là gì(tt) 3- Các ngôn ngữ và ứng dụng OOP • Theo lập trình hướng cấu trúc (thủ tục): • Xuất phát từ tư tưởng của ngôn ngữ SIMULA67 (phát triển vào năm 1960) 1960). CTDL + Thuật giải = Chương trình • Trung tâm nghiên cứu Palo Alto của hãng XEROX đã tập trung 10 năm nghiên cứu để hoàn thiện ngôn ngữ OOP đầu tiên với tên gọi • Theo lập trình hướng đối tượng SMALLTALK. Phương thức + Dữ liệu = Đối tượng • Các ngôn ngữ OOP lần lượt ra đời: EIFFEL, CLOS, LOOPS, FLAVORS, OBJECT PASCAL, OBJECT C, C++, DELPHI, JaVa, C#, Java#. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 31 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 32 8
  9. 5/10/2013 3- Các ngôn ngữ và ứng dụng OOP(tt) 4- Sự đóng kín (Encapsulation) • Chính XEROX, trên cơ sở ngôn ngữ OOP của • Sự đóng kín: Cơ chế liên kết mã và dữ liệu mình đã đề ra tư tưởng giao tiếp hình tượng mà nó thao tác, giữ cho cả 2 được an toàn trên màn hình ( (icon base screen interface). f ) khỏi sự can thiệp từ bên ngoài hoặc do sử dụng sai. • Apple Macintosh, Microsoft Windows phát triển giao tiếp đồ hoạ như hiện nay. Mã + Dữ liệu • Microsoft Windows: ta luôn thực hiện cùng một công việc: “đưa trỏ chuột vào đối tượng rồi nhấn trái chuột”. Mỗi đối tượng có thể là: Control • Trong 1 đối tượng: mã hoặc dữ liệu hoặc cả Menu, Control Menu Box, Title Bar,…sẽ đáp 2 có thể là của riêng đối tượng đó hoặc ứng công việc tuỳ theo đặc tính của mình. chung. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 33 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 34 4- Sự đóng kín (tt) 5- Tính đa hình (Polymorphism) • Nếu mã hoặc dữ liệu là riêng thì nó chỉ có thể • Tính đa hình: Tính chất cho phép 1 tên được được truy cập bởi bộ phận của đối tượng tượng, dùng cho 2 hay nhiều mục đích khác nhau. g y ụ không được truy cập bởi thành phần khác • Mục đích của tính đa hình trong OOP: cho của chương trình tồn tại ngoài đối tượng. phép 1 tên được dùng để chỉ rõ 1 lớp tác • Khi mã hoặc dữ liệu là chung, các bộ phận động tổng quát. khác của CT vẫn có thể truy cập được nó. • Các thành phần chung của đối tượng: cung ầ ố • Trong lớp tác động tổng quát 1 tác động cụ quát, cấp 1 giao diện có điều khiển cho các thành thể được xác định bởi loại dữ liệu. phần riêng của đối tượng. • Ví dụ: Hàm abs(n) trong C++. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 35 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 36 9
  10. 5/10/2013 5- Tính đa hình (tt) 6- Tính thừa kế (Inheritance) • Tính thừa kế: Quá trình 1 đối tượng có thể • Khái niệm tính đa hình chính là ý tưởng 1 có được các tính chất của đối tượng khác. giao diện nhiều phương pháp pháp. • Một đối tượng có thể kế thừa các tính chất • Ưu điểm của tính đa hình: giảm tính phức tổng quát để bổ sung thêm các đặc điểm tạp. của nó. Đối tượng A có x,y • Tính đa hình được áp dụng cho hàm và Thừa kế toán tử: Quá tải hàm; Quá tải toán tử. Đối tượng B có z,t  B có x,y,z,t 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 37 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 38 6- Tính thừa kế(tt) 7- Phương thức ảo (Virtual method) • Phương thức ảo: Phương thức sẽ mang nội • Nếu không thừa kế, mỗi đối tượng sẽ phải dung cụ thể vào lúc thực hiện CT. g định hĩ đị h nghĩa mọi đặ t i đặc trưng có liê quan đế ó liên đến nó. • Khi biên dịch, đoạn CT của phương thức ảo sẽ được đưa vào bảng các phương thức • Ví dụ: Đối tượng A có hàm nhap, xuat ảo(Virtual method table – VMT). Đối tượng B giống đối tượng A có hàm nhap, xuat và hàm xu ly xu_ly • Khi CT thực hiện, các phương thức ảo sẽ • Nếu B không thừa kế A: Khi xây dựng B được gọi từ bảng phương thức ảo này. ta phải xây dựng cả 3 hàm nhap, xuat và • Đây là kỹ thuật kết nối động(dynamic binding) hàm xu_ly – kết nối trễ(late binding). 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 39 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 40 10
  11. 5/10/2013 Bài tập chương 1 Chương 2: Lớp và thực thể 1. Viết chương trình tính n! 1.Lớp và thực thể 2. Viết chương trình tính tổng n số nguyên g g g y dương chẵn đầu tiên. 2.Hàm tạo – Hàm huỷ 3. Viết chương trình tính tổng n số nguyên 3.Con trỏ đối tượng dương lẻ đầu tiên. 4. Viết chương trình tìm ước số chung lớn 4.Các hàm nội tuyến nhất của 2 số nguyên dương m nm,n. 5.Gán – Truyền – Trả đối tượng về từ hàm 5. Viết chương trình nhập 1 số nguyên từ 1 đến 12. Cho biết tháng tương ứng với số có 6.Giới thiệu các hàm friend bao nhiêu ngày. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 41 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 42 1- Lớp và thực thể 1- Lớp và thực thể(tt) b. Thực thể (Instance) – đối tượng: là biến kiểu a. Lớp (class): Thực chất là 1 kiểu dữ liệu lớp. Muốn sử dụng lớp phải khai báo đối tượng được định nghĩa trong CT. thuộc lớp. • Định nghĩa lớp: • Lớp gồm 2 thành phần: Dữ liệu và class phương thức. { // dữ liệu //phương thức, hàm thành phần • Các thành phần của lớp có thể có 1 trong }; 3 thuộc tính: • Định Đị h nghĩa phương thức ngoài khai báo lớp hĩ h thứ ài kh i bá lớ  private ::(đối số) { //thân hàm  protected [ return ;]  public } 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 43 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 44 11
  12. 5/10/2013 1- Lớp và thực thể(tt) 1- Lớp và thực thể(tt) • Khai báo đối tượng thuộc lớp: • Ví dụ 2: Lớp sample có 2 vùng dữ liệu nguyên. ; Các phương thức: nhap, xuat. class sample • Ví dụ 1: Lớp sample có 1 vùng dữ liệu nguyên. { int a, b; Các phương thức: nhap, xuat. public: class sample void nhap(); { int a; void xuat(); public: }; void nhap() { cou o d ap() couta; } a; void sample:: nhap() { cout>a>>b; } cout
  13. 5/10/2013 2- Hàm tạo – Hàm huỷ(tt) 2- Hàm tạo – Hàm huỷ(tt) • Đặc điểm của PTTL: • Hàm huỷ - Phương thức huỷ bỏ (Destructor) – PTTL có tên trùng tên lớp g p • Phương thức huỷ bỏ (PTHB) là phương thức – Không có giá trị trả về đặc biệt của lớp nhằm thực hiện các công việc như: thu hồi vùng nhớ, đóng tập tin đã mở. – Có thể có 1 hoặc nhiều tham số hoặc không có tham số nào. • Ví dụ: class sample – Một lớp có thể không có, hoặc có 1 hoặc nhiều có { int a; PTTL public: sample() {cout
  14. 5/10/2013 4- Các hàm nội tuyến 4- Các hàm nội tuyến(tt) a. Hàm nội tuyến  Ưu điểm của hàm nội tuyến: Không có các thủ tục bổ sung kết hợp với gọi hàm - Khai báo hàm nội tuyến: Đặt trước định và cơ chế trả về. nghĩa hàm chỉ định inline.  Tuỳ vào trình biên dịch, có nhiều hạn chế - Hàm nội tuyến thi hành nhanh hơn các áp dụng cho hàm nội tuyến. hàm thông thường. g g  Nếu 1 hạn chế nội tuyến bị vi phạm, trình - Hàm ngắn khai báo nội tuyến. biên dịch sẽ tạo ra 1 hàm bình thường. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 53 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 54 4- Các hàm nội tuyến(tt) 4- Các hàm nội tuyến(tt)  Ví dụ:  Những qui định về nội tuyến: class sample  Hàm không có cấu trúc lặp { int a,b; public:  Không có lệnh nhảy goto sample(int x, int y);  Không có lệnh gọi đệ quy long square(); }; inline sample::sample(int x, int y) { a=x; b=y;} inline long sample::square() { return a*a+b*b; } 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 55 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 56 14
  15. 5/10/2013 5- Gán – Truyền – Trả đối 5- Gán – Truyền – Trả đối tượng về từ hàm tượng về từ hàm(tt) • Ví dụ: • Các đối tượng có thể được sử dụng ợ g ợ ụ g class Toado tương tự các biến kiểu bất kỳ. { int x, y; public: void nhap() { cin>>x>>y; } • Có thể thực hiện gán các đối tượng cùng void xuat() {cout
  16. 5/10/2013 6- Giới thiệu các hàm friend(tt) 6- Giới thiệu các hàm friend(tt) • Ví dụ 2: Hàm friend của nhiều hơn 1 lớp • Ví dụ 2: Hàm friend của nhiều hơn 1 lớp(tt) class struck; class struck str ck class car { int num, speed; { int num, speed; public: public: void get(int a, int b) { num=a;speed=b; } void get(int a, int b) { num=a;speed=b; } void put() { cout
  17. 5/10/2013 Bài tập chương 2(tt) Chương 3: Quá tải hàm 3. Xây dựng lớp PHANSO gồm 2 vùng dữ liệu: tử và mẫu. Các phương thức: Nhập, Xuất để nhập xuất dữ liệu phân số. Phương thức ấ ố • Quá tải hàm tạo tạo. cộng, trừ để cộng trừ 2 phân số. Phương thức tối giản để tối giản 1 phân số. Viết hàm • Sử dụng các đối số mặc định. main minh họa. • Sự quá tải và tính không xác định. 4. Xây dựng lớp HINHCHUNHAT gồm 2 vùng dữ liệu: Chiều dài, chiều rộng. Phương thức: ề ề Nhập để nhập giá trị chiều dài, chiều rộng. Phương thức Xuất để vẽ hình chữ nhật bằng các dấu *. Viết hàm main. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 65 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 66 1- Quá tải hàm tạo 2- Sử dụng các đối số mặc định • Ví dụ: • Ví dụ: class toado { int x, y; class toado pubic: void xuat() {cout
  18. 5/10/2013 3- Sự quá tải và tính không xác định 3- Sự quá tải và tính không xác định(tt) • Khi có dùng đối số mặc định • Kiểu dữ liệu • Ví dụ 1: • Ví dụ 2: ụ class toado float f1(float a) { a++; return a;} { int x, y; double f1(double a) { a++; return a;} pubic: void xuat() {cout
  19. 5/10/2013 Bài tập chương 3 Bài tập chương 3(tt) 1. Xây dựng lớp SOPHUC gồm 2 vùng dữ liệu: 2. Xây dựng lớp HINHCHUNHAT gồm 2 vùng thực, ảo. Các phương thức: dữ liệu: chiều dài, chiều rộng. Các phương • PTTL không đối số: khởi tạo giá trị 0 cho 2 thức: vùng dữ liệu. • PTTL không đối số: khởi tạo giá trị 0 cho 2 • PTTL 1 đối số: khởi tạo giá trị cho 2 vùng dữ vùng dữ liệu. liệu là giá trị của đối số. • PTTL 1 đối số: khởi tạo giá trị cho 2 vùng dữ • PTTL 2 đối số: khởi tạo g trị cho 2 vùng dữ ạ giá ị g liệu là giá trị của đối số. liệu là giá trị tương ứng của 2 đối ô1. • PTTL 2 đối số: khởi tạo giá trị cho 2 vùng dữ • Xuất: In ra màn hình giá trị thực ảo theo dạng liệu là giá trị tương ứng của 2 đối ô1. số phức. • Xuất: Vẽ hình chữ nhật bằng dấu *. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 73 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 74 Bài tập chương 3(tt) Chương 4: Quá tải toán tử 3. Xây dựng hàm hoán vị để hoán đổi nội dung của 2 số nguyên, 2 số thực và 2 số nguyên 1. Toán tử đơn nguyên g y nguyên dài. Viết hàm main minh họa. 2. Toán tử nhị nguyên 4. Xây dựng hàm nhập để nhập giá trị n phần 3. Toán tử quan hệ luận lý tử nguyên, n phần tử thực. Xây dựng hàm xuất để in ra màn hì h giá t ị các phần tử ất i à hình iá trị á hầ của mảng n số nguyên, n số thực. Viết hàm main minh họa. 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 75 5/10/2013 ThS. Huỳnh Thị Thu Thuỷ 76 19
  20. 5/10/2013 1- Toán tử đơn nguyên 1- Toán tử đơn nguyên(tt) • Dùng hàm friend: • Dùng hàm thành phần: friend void operator( &) operator() { //thân hàm { // thân hàm } return *this; } • Ví dụ: class toado • Ví dụ: class toado { int x,y; public: { int x,y; public: void nhap(){cout>y;} p(){ p ,y ; y;} void xuat(){cout
nguon tai.lieu . vn