![](images/graphics/blank.gif)
Bài giảng Kỹ thuật lập trình: Phần 2 - ĐH CNTT&TT
lượt xem 8
download
![](https://tailieu.vn/static/b2013az/templates/version1/default/images/down16x21.png)
Tiếp nối nội dung phần 1, phần 2 của bài giảng "Kỹ thuật lập trình" trang bị cho người học những kiến thức về lập trình hướng đối tượng trong C++ và các phương pháp xử lý đồ họa căn bản. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Phần 2 - ĐH CNTT&TT
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện Chương 2: Lập trình hướng đối tượng trong C++ 2.1 Lớp và đối tượng 2.1.1 Khái niệm, cú pháp khai báo Lớp: Lớp là thành phần cơ bản của chương trình hướng đối tượng, dùng để định nghĩa đối tượng. Đối tượng - Đối tượng là sự thể hiện của lớp. - Mỗi đối tượng được xác định bởi thuộc tính (dữ liệu, biến) và hành vi (phương thức). Thuộc tính để xác định tính chất riêng của đối tượng, hành vi là hành động tác động lên đối tượng. Cú pháp: //Cú pháp khai báo lớp class tên_lớp{ [mức_độ_truy_cập:] Các_thuộc_tính [mức_độ_truy_cập:] Các_phương_thức }[tên_đối_tượng]; //Cú pháp khai báo đối tượng tên_lớp tên_đối tượng; - Thuộc tính: như khai báo biến - Phương thức: như khai báo hàm Cách truy xuất: Tên_đối_tượng. Tên_thuộc_tính Tên_đối_tượng. Tên_phương_thức 2.1.2 Mức độ truy cập - Private: chỉ cho phép các hàm trong lớp truy cập đến thành phần này, các lớp khác không thể truy cập. - Public: được phép truy cập từ mọi lớp. - Protected: cho phép các thành viên của cùng một lớp hoặc từ một lớp dẫn xuất của nó. - Khi không có từ khóa truy cập thì toàn bộ các thành viên của lớp được hiểu mặc định là có thuộc tính private. class A class B { { //mac dinh la private void h() int x; { 38 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện void g() A a; { a.x++;//sai vì x là private của A /*g() trong cùng lớp A với x nên g() } truy xuất đươc x*/ }; x++; int main() } { public: A a; int f() a.g(); //sai vì g là private của A { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện - Giải phóng bộ nhớ trước khi kết thúc công việc với đối tượng đó. - Có tên trùng với hàm khởi tạo nhưng thêm dấu ~ trước tên hàm. - Không có tham số. - Trong chương trình chính ta không gọi hàm giải phóng nhưng hàm này vẫn được thực hiện. ~VD() { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện Đối tượng làm tham số hàm, hàm trả về kiểu đối tượng Ví dụ: using namespace std; class VD{ private: int a,b; public: VD() { a=18; b=27; } VD(int x, int y) { a=x; b=y; } void show() { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện VD o3; o3 = o1.add(o2); //o2.mul(o2); o3.show(); system("pause"); } 2.2 Nâng cao về lớp và đối tượng 2.2.1 Con trỏ đối tượng Chúng ta đã làm quen với mảng đối tượng và chúng ta cũng đã biết rằng có sự tương ứng 1-1 giữa mảng và con trỏ. Trong phần này, chúng ta sẽ thảo luận về con trỏ đối tượng. Việc khai báo con trỏ đối tượng hoàn toàn tương tự như khai báo con trỏ dữ liệu. Humans *man; Để truy cập đến các phương thức thành viên bên ngoài lớp (hàm thành viên), ta sử dụng dấu ->. Khi gọi phương thức khởi tạo, ta có thể gọi theo cách mà ta đã sử dụng cho con trỏ dữ liệu. Hoặc bạn có thể sử dụng toán tử new. Chương trình Kết quả … int main() Andy, 22 Jack, 21 { Humans man(“Andy”, 22); Humans *man0 = &man; //Hoặc Humans *man1 = new Humans(“Jack”, 21); cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện x.y thành viên y của đối tượng x x->y thành viên y của đối tượng trỏ bởi x (*x).y thành viên y của đối tượng trỏ bởi x x[i] đối tượng thứ i trỏ bởi x 2.2.2 Con trỏ this Từ khoá this ở bên trong một lớp đại diện cho đối tượng của lớp đó đang được thực hiện trong bộ nhớ. Nó là một con trỏ luôn có giá trị là địa chỉ của đối tượng. Nó có thể được dùng để kiểm tra xem tham số được truyền cho một hàm thành viên có phải chính bản thân đối tượng hay không. Ví dụ: class myClass { int a,b; int add(int a, int b) { this.a=a;//a là tham số của phương thức, this.a là thành viên lớp this.b=b; return this.a+this.b; } } 2.2.3 Thành viên tĩnh Một lớp có thể chứa các thành viên tĩnh, cả dữ liệu và các hàm. Các dữ liệu tĩnh còn được gọi là "biến của lớp" vì nội dung của chúng không phụ thuộc vào một đối tượng nào. Chỉ có một giá trị duy nhất cho tất cả các đối tượng trong cùng một lớp. Ví dụ, nó có thể được trong trường hợp bạn muốn có một biến chứa số đối tượng thuộc lớp đã được khai báo: 45 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện 2.3 Nạp chồng Nạp chồng là một đặc tính quan trọng của C++ đó là cơ chế giúp bạn thực hiện tính đa hình trong lập trình hướng đối tượng. Có hai kiểu nạp chồng được cung cấp trong C++ đó là nạp chồng hàm và nạp chồng toán tử. Vậy thì hai kiểu nạp chồng này là gì, hoạt động như thế nào hôm nay chúng ta sẽ đi tìm hiểu về 2 hình thức nạp chồng này. 2.3.1 Nạp chồng phương thức Là một cơ chế của C++ cho phép chúng ta định nghĩa và sử dụng các hàm cùng tên, miễn là khác kiểu tham số hoặc là số lượng tham số khác nhau. Các hàm sử dụng cùng tên gọi là hàm chồng. Nạp chồng với kiểu tham số khác nhau Trong trường hợp này, các hàm có cùng số lượng tham số nhưng kiểu của tham số là khác nhau. Trình biên dịch sẽ dựa trên kiểu đối số của hàm để xác định hàm tương ứng. Ví dụ: class myClass { void hello(int a) // hàm này với tham số truyền vào là kiểu nguyên 46 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện class myClass { public:int add(int a=0, int b=0, int c=0) {return a+b+c;} }; int main() { myClass obj1; cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện 2. Không thể thay đổi thứ tự ưu tiên của các toán tử 3. Không thể thay đổi số lượng toán hạng 4. Toán tử > đã được nạp chồng rồi để thực hiện nhập/xuất 5. Hàm toán tử không được chứa tham số mặc định Nạp chồng toán tử hai ngôi Khi nạp chồng toán tử hai ngôi hàm toán tử sẽ chỉ có một tham số duy nhất. Tham số này sẽ nhận một đối tượng là toán hạng nằm bên phải của toán tử (phép toán). Ví dụ: // vidu.cpp : main project file. #include "stdafx.h" #include using namespace std; class phanso { public:int tu,mau; public: phanso(){}; public: phanso(int a, int b) { tu=a;mau=b;} void show() { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện phanso p1(1,2),p2(3,4),p3; p3=p1+p2; p3.show(); system("pause"); } Nạp chồng toán tử một ngôi Nạp chồng toán tử một ngôi cũng giống như đối với toán tử hai ngôi. Tuy nhiên toán tử một ngôi chỉ có một toán hạng và do đó hàm toán tử không có tham số. Ví dụ: // vidu.cpp : main project file. #include "stdafx.h" #include using namespace std; class phanso { public:int tu,mau; public: phanso(){}; public: phanso(int a, int b) { tu=a;mau=b; } void show() { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện tu++; mau++; return *this; } }; int main() { phanso p1(1,2),p2(3,4),p3; p3=p1+p2;// Nạp chồng toán tử 2 ngôi p3.show(); // p3++;//Nạp chồng toán tử 1 ngôi p3.show(); system("pause"); } Nạp chồng toán tử so sánh và toán tử logic Như bạn đã biết biểu thức a>b trả về true nếu a lớn hơn b, false nếu a nhỏ hơn b. Trong C++ giá trị false tương ứng với 0, giá trị true tương ứng với một số nguyên khác 0. Do đó người ta thường sử dụng kiểu giá trị trả về của các hàm toán tử (khi chồng toán tử so sánh và toán tử logic) là kiểu số nguyên. Ví dụ: #include "stdafx.h" #include using namespace std; class phanso { public:int tu,mau; public: phanso(){}; public: phanso(int a, int b) { tu=a;mau=b; } void show() 51 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện p3=p1+p2; p3.show(); // p3++; p3.show(); // if(p1>p2){cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện Kế thừa kiểu public: class lop_con: public lop_cha{ } Đây là kiểu kế thừa chúng ta hay dùng nhất. Với kiểu kế thừa này, các đối tượng của lớp con có thể truy cập vào các thành viên public và protected của lớp cha. Các thành viên protected của lớp cha sẽ trở thành thành viên protected của lớp con và các thành viên public của lớp cha trở thành thành viên public của lớp con. Kế thừa kiểu private: class lop_con: private lop_cha{ } Đối với kiểu kế thừa này, tất cả các thành viên của lớp cha (trừ các thành viên có mức độ truy cập private) sẽ trở thành các thành viên private của lớp con và chỉ có thể được sử dụng bởi các phương thức trong lớp con. Kế thừa kiểu protected: class lop_con: protected lop_cha{ } Đối với kiểu kế thừa này, tất cả các thành viên của lớp cha (trừ các thành viên có mức độ truy cập private) sẽ trở thành các thành viên protected của lớp con và có thể được sử dụng bởi các phương thức trong lớp con và các đối tượng của nó. Có thể tóm tắt lại các kiểu kế thừa như sau: - Cột: các kiểu kế thừa - Hàng: phạm vi các biến/phương thức thành phần trong lớp cha - Kết quả: phạm vi các biến/phương thức trong lớp con 2.4.3 Kế thừa với hàm tạo và hàm hủy Tất cả các lớp cha và lớp con đều có thể có hàm tạo và hàm hủy. Nếu cả lớp cha và lớp con đều có hàm tạo, hàm hủy thì hàm tạo của lớp cha sẽ được thực hiện trước hàm tạo của lớp con khi một đối tượng của lớp con được tạo ra. Điều này ngược lại 54 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện với hàm hủy. Tức là, hàm hủy của lớp con sẽ được thực hiện trước hàm hủy của lớp cha. Ví du: #include "stdafx.h" #include using namespace System; using namespace std; class cha { int a,b; public: cha() { cout
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện Day la phuong thuc khoi tao cua lop cha Day la phuong thuc khoi tao cua lop con Ham huy cua lop con ham huy cua lop cha 2.4.4 Phương thức ảo Phương thức ảo cũng giống như một phương thức thành viên khác của lớp. Trên thực tế, phương thức ảo là một phương thức thành viên được khai báo trong lớp cha và sẽ được định nghĩa lại trong các lớp con kế thừa nó. Khi một lớp chứa phương thức ảo được kế thừa bởi một lớp khác, nói chung phương thức này phải được định nghĩa lại cho mục đích riêng của lớp kế thừa. Phương thức ảo được tạo bằng cách đặt từ khóa virtual ngay trước khai báo phương thức. Khi hàm ảo được định nghĩa lại trong lớp con, ta không cần sử dụng từ khóa virtual. Ta có cú pháp khai báo hàm ảo như sau: 56 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Bài giảng Kỹ thuật lập trình – Ngành Truyền thông đa phương tiện class lop_cha { //các thành phần của lớp //Khai báo hàm ảo có tên là ham_ao, có kiểu trả về là int và không có tham số Public: virtual int ham_ao() { } }; class lop_con : public lop_cha { //các thành phần khác của lớp //định nghĩa lại hàm ảo được kế thừa ở lớp cha Public: int ham_ao() { //nội dung định nghĩa lại hàm ảo } }; 2.4.5 Lớp trừu tượng Một lớp cơ sở trừu tượng là một lớp chỉ được dùng làm cơ sở cho các lớp khác. Không hề có đối tượng nào của một lớp trừu tượng được tạo ra cả, bởi vì nó chỉ được dùng để định nghĩa một số khái niệm tổng quát, chung cho các lớp khác. Một ví dụ về lớp trừu tượng là lớp CON_VAT (con vật), nó sẽ dùng làm cơ sở để xây dựng các lớp con vật cụ thể như lớp CON_CHO (con chó), CON_MEO (con mèo),... (xem ví dụ bên dưới) Trong C++ , thuật ngữ “Lớp trừu tượng” đặc biệt áp dụng cho các lớp có chứa các phương thức ảo thuần tuý. Phương thức ảo thuần tuý là một phương thức ảo mà nội dung của nó không có gì. Cách thức định nghĩa một phương thức ảo thuần tuý như sau: virtual void tên_phương_thức() = 0 ; Ví dụ: class A { 57 Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
![](images/graphics/blank.gif)
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p |
23 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p |
22 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p |
27 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p |
26 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p |
21 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p |
24 |
2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p |
27 |
2
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 1) - ThS. Đặng Bình Phương
26 p |
13 |
0
-
Bài giảng Kỹ thuật lập trình: Các kỹ thuật thao tác trên bit - ThS. Đặng Bình Phương
29 p |
18 |
0
-
Bài giảng Kỹ thuật lập trình: Tập tin - ThS. Đặng Bình Phương
48 p |
14 |
0
-
Bài giảng Kỹ thuật lập trình: Kỹ thuật lập trình đệ quy - ThS. Đặng Bình Phương
44 p |
15 |
0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu cấu trúc - ThS. Đặng Bình Phương
33 p |
15 |
0
-
Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - ThS. Đặng Bình Phương
20 p |
16 |
0
-
Bài giảng Kỹ thuật lập trình: Danh sách liên kết - ThS. Đặng Bình Phương
20 p |
16 |
0
-
Bài giảng Kỹ thuật lập trình: Chuyển đổi kiểu dữ liệu và cấp phát bộ nhớ động - ThS. Đặng Bình Phương
28 p |
18 |
0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu con trỏ (Nâng cao) - ThS. Đặng Bình Phương
48 p |
16 |
0
-
Bài giảng Kỹ thuật lập trình: Giới thiệu môn học - ThS. Đặng Bình Phương
7 p |
14 |
0
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 2) - ThS. Đặng Bình Phương
30 p |
10 |
0
![](images/icons/closefanbox.gif)
![](images/icons/closefanbox.gif)
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn
![](https://tailieu.vn/static/b2013az/templates/version1/default/js/fancybox2/source/ajax_loader.gif)