Giáo trình Lập trình hướng đối tượng (Phần 2)

Sự dẫn xuất và tính thừa kế

3.1.1. Lớp cơ sở và lớp dẫn xuất

Lập trình hướng đối tượng có hai đặc trưng cơ bản:

? Đóng gói dữ liệu, được thể hiện bằng cách dùng khái niệm lớp để biểu

diễn đối tượng với các thuộc tính private, chỉ cho phép bên ngoài truy nhập

vào thông qua các phương thức.

? Dùng lại mã, thể hiện bằng việc thừa kế giữa các lớp. Việc thừa kế cho

phép các lớp thừa kế (gọi là lớp dẫn xuất) sử dụng lại các phương thức đã

được định nghĩa trong các lớp gốc (gọi là lớp cơ sở).

Một lớp có thể được dẫn xuất từ nhiều lớp cơ sở, một lớp cơ sở cũng có thể là

lớp cơ sở của nhiều lớp dẫn xuất.

3.1.2. Cách xây dựng lớp dẫn xuất

Cú pháp khai báo một lớp thừa kế từ một lớp khác như sau:

class :

{

// Khai báo các thành phần của lớp

};

Trong đó:

Tên lớp dẫn xuất: là tên lớp được cho thừa kế từ lớp khác. Tên lớp này tuân

thủ theo quy tắc đặt tên biến trong C++.

Tên lớp cở sở: là tên lớp đã được định nghĩa trước đó để cho lớp khác thừa kế.

Tên lớp này cũng tuân thủ theo quy tắc đặt tên biến của C++.

Từ khóa dẫn xuất: là từ khóa quy định tính chất của sự thừa kế. Có ba từ khóa

dẫn xuất là private, protected và public.

Ví dụ 3.1:

class Bus: public Car

{

// Khai báo các thành phần

};

là khai báo một lớp Bus (xe buýt) thừa kế từ lớp Car (xe ô tô) với tính chất thừa

kế là public.

 

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 1

Trang 1

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 2

Trang 2

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 3

Trang 3

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 4

Trang 4

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 5

Trang 5

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 6

Trang 6

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 7

Trang 7

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 8

Trang 8

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 9

Trang 9

Giáo trình Lập trình hướng đối tượng (Phần 2) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 166 trang duykhanh 7700
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Lập trình hướng đối tượng (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Lập trình hướng đối tượng (Phần 2)

Giáo trình Lập trình hướng đối tượng (Phần 2)
.display(); 
 getch(); 
 break; 
 case 'b': 
 char ma[5]; 
 cout<<"So hoa don:"; 
 cin.ignore(); 
 cin.getline(ma,5); 
 hdl.find_tt(ma); 
 getch(); 
 break; 
 case 'c': 
 hoadon x; 
 clrscr(); 
 cout<<"Nhap thong tin ve hoa don bo 
sung\n"; 
 cin>>x; 
 hdl.add(x); 
 hdl.ghi_bs("hoadon.txt",x); 
 break; 
 case 'd': 
 cout<<"So hoa don:"; 
 cin.getline(ma,5); 
 hdl.remove(ma); 
 hdl.ghi_tep("hoadon.txt"); 
 break; 
 case 'e': 
 Trang - 241 - 
Lập trình h•ớng đối t•ợng 
 cout<<"Co tat ca "<<hdl.count()<<" hoa 
don"; 
 getch(); 
 break; 
 case 'f': 
 cout<<"Ma nhan vien:"; 
 cin.getline(ma,5); 
 cout<<"Nhan vien da ban 
duoc:"<<hdl.tk_nv(ma)<<"$"; 
 getch(); 
 break; 
 case 'g': 
 cout<<"Ma khach hang:"; 
 cin.getline(ma,5); 
 cout<<"Khach hang da mua hang 
het:"<<hdl.tk_kh(ma)<<"$"; 
 getch(); 
 break; 
 case 'h': 
 cout<<"Ma mat hang:"; 
 cin.getline(ma,5); 
 cout<<"Mat hang da ban duoc:"<<hdl.tk_mh(ma)<<"$"; 
 getch(); 
 break; 
 } 
 } 
 while(lc!='r'); 
 break; 
 case 7: 
 list ccl; 
 ccl.doc_tep("nhacc.txt"); 
 do 
 { 
 clrscr(); 
 cout<<"\na. Hien thi danh sach nha cung cap"; 
 cout<<"\nb. Tim kiem"; 
 cout<<"\nc. Bo sung nha cung cap vao danh sach"; 
 cout<<"\nd. Loai bo nha cung cap khoi danh sach:"; 
 cout<<"\ne. Thong ke so nha cung cap"; 
 cout<<"\nf. Tim cac mat hang"; 
 cout<<"\ng. Quay lai(nhan r):"; 
 cout<<"\n Ban chon:"; 
 cin>>lc; 
 switch(lc) 
 { 
 case 'a': 
 ccl.display(); 
 Trang - 242 - 
Lập trình h•ớng đối t•ợng 
 getch(); 
 break; 
 case 'b': 
 char ma[5]; 
 cout<<"Ma nha cung cap:"; 
 cin.ignore(); 
 cin.getline(ma,5); 
 ccl.find_tt(ma); 
 getch(); 
 break; 
 case 'c': 
 nhacungcap x; 
 clrscr(); 
 cout<<"Nhap thong tin ve nha cung cap bo 
sung\n"; 
 cin>>x; 
 ccl.add(x); 
 ccl.ghi_bs("nhacc.txt",x); 
 break; 
 case 'd': 
 cout<<"Ma nha cung cap:"; 
 cin.getline(ma,5); 
 ccl.remove(ma); 
 ccl.ghi_tep("nhacc.txt"); 
 break; 
 case 'e': 
 cout<<"Co tat ca "<<ccl.count()<<" nha cung 
cap"; 
 getch(); 
 break; 
 case 'f': 
 list l; 
 l.doc_tep("mathang.txt"); 
 cout<<"Ma nha cung cap:"; 
 cin.getline(ma,5); 
 l.find_tt(ma); 
 getch(); 
 break; 
 } 
 } 
 while(lc!='r'); 
 break; 
 } 
 } 
 while (chon!=8); 
} 
 Trang - 243 - 
Lập trình h•ớng đối t•ợng 
Câu hỏi và bài tập 
1. Muốn mở một tệp tin tên là abc.txt để đọc dữ liệu, lệnh mở tệp nào sau đây là 
đúng: 
 a. fstream myFile(“abc.txt”, ios::in); 
 b. fstream myFile(“abc.txt”, ios::out); 
 c. fstream myFile(“abc.txt”, ios::app); 
 d. fstream myFile(“abc.txt”, ios::ate); 
2. Muốn mở một tệp tin abc.txt nằm trong th• mục xyz để ghi dữ liệu vào. Lệnh 
mở nào sau 
đây là đúng: 
 a. fstream myFile(“xyz\abc.txt”, ios::out); 
 b. fstream myFile(“xyz\\abc.txt”, ios::out); 
 c. fstream myFile(“xyz/abc.txt”, ios::out); 
 d. fstream myFile(“xyz//abc.txt”, ios::out); 
3. Muốn mở một tệp tin abc.txt để ghi thêm dữ liệu vào cuối tệp, lệnh nào sau 
đây là đúng: 
 a. fstream myFile(“abc.txt”, ios::out); 
 b. fstream myFile(“abc.txt”, ios::app); 
 c. fstream myFile(“abc.txt”, ios::out|ios::app); 
 d. fstream myFile(“abc.txt”, ios::out||ios::app); 
4. Xét hai lệnh khai báo sau: 
 fstream myFile1(“abc.txt”, ios::out); 
 ofstream myFile2(“abc.txt”, ios::out); 
nhận định nào sau đây là đúng: 
 a. myFile1 và myFile2 có chức năng giống nhau. 
 b. myFile1 và myFile2 có chức năng khác nhau 
5. Xét hai lệnh khai báo sau: 
 fstream myFile1(“abc.txt”, ios::in); 
 ifstream myFile2(“abc.txt”, ios::in); 
nhận định nào sau đây là đúng: 
 a. myFile1 và myFile2 có chức năng giống nhau. 
 b. myFile1 và myFile2 có chức năng khác nhau 
 Trang - 244 - 
Lập trình h•ớng đối t•ợng 
6. Xét đoạn ch•ơng trình sau: 
 ofstream myFile(“abc.txt”, ios::out); 
 if(myFile) myFile << “abc.txt”; 
Ch•ơng trình sẽ làm gì? 
 a. Ghi ra màn hình dòng chữ “abc.txt” 
 b. Ghi vào tệp tin abc.txt dòng chữ “abc.txt” 
 c. Đọc từ tệp tin abc.txt dòng chữ “abc.txt” 
 d. Ch•ơng trình sẽ báo lỗi. 
7. Xét đoạn ch•ơng trình sau: 
 ifstream myFile(“abc.txt”, ios::in); 
 char text[20]; 
 if(myFile) myFile >> text; 
Ch•ơng trình sẽ làm gì, nếu tệp tin abc.txt có nội dung là dòng chữ “abc.txt”? 
 a. Ghi ra màn hình dòng chữ “abc.txt” 
 b. Ghi vào tệp tin abc.txt dòng chữ “abc.txt” 
 c. Đọc từ tệp tin abc.txt dòng chữ “abc.txt” 
 d. Ch•ơng trình sẽ báo lỗi. 
8. Xét đoạn ch•ơng trình sau: 
 fstream myFile(“abc.txt”, ios::out); 
 if(myFile) myFile << “abc.txt”; 
 myFile.close(); 
 myFile.open(“abc.txt”, ios::in); 
 char text[20]; 
 if(myFile) myFile >> text; 
 cout << text; 
Ch•ơng trình sẽ làm gì, nếu tệp tin abc.txt có nội dung là dòng chữ “abc.txt”? 
 a. Ghi vào tệp tin abc.txt dòng chữ “abc.txt” 
 b. Đọc từ tệp tin abc.txt dòng chữ “abc.txt” 
 c. Ghi ra màn hình dòng chữ “abc.txt” 
 d. Cả ba đáp án trên. 
 e. Ch•ơng trình sẽ báo lỗi. 
9. Xét đoạn ch•ơng trình sau: 
 ifstream myFile(“abc.txt”, ios::in); 
 Trang - 245 - 
Lập trình h•ớng đối t•ợng 
 if(myFile) cout << myFile.tellg(); 
Ch•ơng trình sẽ in ra màn hình kết quả gì? 
 a. 0 
 b. 1 
 c. 8 
 d. 16 
10. Xét đoạn ch•ơng trình sau, nếu tệp abc.txt chứa một số l•ợng kí tự đủ lớn: 
 ifstream myFile(“abc.txt”, ios::in); 
 if(myFile){ 
 char c; 
 myFile >> c; 
 cout << myFile.tellg();} 
Ch•ơng trình sẽ in ra màn hình kết quả gì? 
 a. 0 
 b. 1 
 c. 8 
 d. 16 
11. Xét đoạn ch•ơng trình sau, nếu tệp abc.txt chứa một số l•ợng kí tự đủ lớn: 
 ifstream myFile(“abc.txt”, ios::in); 
 if(myFile){ 
 myFile.seekg(sizeof(char)*5, ios::beg); 
 myFile.seekg(sizeof(char)*5, ios::cur); 
 cout << myFile.tellg();} 
Ch•ơng trình sẽ in ra màn hình kết quả gì? 
 a. 0 
 b. 5 
 c. 10 
 d. 80 
12. Viết một ch•ơng trình gộp nội dung của hai tệp tin có sẵn vào một tệp tin thứ 
ba. Tên các tệp tin đ•ợc nhập vào từ bàn phím. 
13. Viết một ch•ơng trình tìm kiếm trên tệp nhị phân có cấu trúc đ•ợc tạo bởi ví 
dụ 5.8. Tìm tất cả các nhân viên có tên là X, X đ•ợc nhập từ bàn phím. Hiển thị 
kết quả là tất cả các thông tin về các nhân viên đ•ợc tìm thấy. 
 Trang - 246 - 
Lập trình h•ớng đối t•ợng 
14. Viết một ch•ơng trình tìm kiếm trên tệp nhị phân có cấu trúc đ•ợc tạo bởi ví 
dụ 5.8. Tìm tất cả các nhân viên có năm sinh là X, X đ•ợc nhập từ bàn phím. 
Hiển thị kết quả là tất cả các thông tin về các nhân viên đ•ợc tìm thấy. 
15. Viết một ch•ơng trình tìm kiếm trên tệp nhị phân có cấu trúc đ•ợc tạo bởi ví 
dụ 5.8. Tìm tất cả các nhân viên có l•ơng cao hơn hoặc bằng một giá trị X, X 
đ•ợc nhập từ bàn phím. Hiển thị kết quả là tất cả các thông tin về các nhân viên 
đ•ợc tìm thấy. 
16. Viết một ch•ơng trình sao chép một đoạn đầu nội dung của một tệp tin vào 
một tệp tin thứ hai. Tên các tệp tin và độ dài đoạn nội dung cần sao chép đ•ợc 
nhập từ bàn phím. 
17. Viết một ch•ơng trình sao chép một đoạn cuối nội dung của một tệp tin vào 
một tệp tin thứ hai. Tên các tệp tin và độ dài đoạn nội dung cần sao chép đ•ợc 
nhập từ bàn phím 
 Trang - 247 - 
Lập trình h•ớng đối t•ợng 
 Một số thông báo lỗi th•ờng gặp 
 Thông báo lỗi ý nghĩa 
( expected Thiếu ( 
) expected Thiếu ) 
, expected Thiếu , 
< expected Thiếu < 
{ expected Thiếu { 
} expected Thiếu } 
: expected after private Thiếu dấu : sau từ khoá private 
: expected after protected Thiếu dấu : sau từ khoá protected 
: expected after public Thiếu dấu : sau từ khoá public 
Array bounds missing ] Khai báo mảng thiếu ] 
Array must have at least one element Mảng phải có ít nhất một phần tử 
Array size too large Kích th•ớc mảng quá lớn 
Bad define directive syntax Sai cú pháp sử dụng define 
Bad file name format in include Tên file trong khai báo bao hàm tệp 
directive include sai 
Call of nonfunction Lời gọi hàm sai 
Cannot overload 'main' Có nhiều hơn 1 hàm main trong 
 ch•ơng trình 
Case outside of switch Sử dụng case ngoài toán tử switch 
Case statement missing : Câu lệnh case thiếu : 
Class member 'member' declared Hàm thành phần khai báo bên ngoài 
outside its class lớp 
Compound statement missing } Câu lệnh ghép thiếu } 
Constructor cannot be declared 'const' or Hàm tạo không thể sử dụng khai báo 
 Trang - 248 - 
Lập trình h•ớng đối t•ợng 
'volatile' const hoặc volatile 
Constructor cannot have a return type Hàm tạo không thể trả về giá trị 
 specification 
Could not find file 'filename' Không tìm thấy file 
Declaration is not allowed here Khai báo đặt sai vị trí 
Declaration missing ; Khai báo thiếu ; 
Declaration syntax error Câu lệnh khai báo sai cú pháp 
Declaration terminated incorrectly Khai báo sai (thừa dấu ; ở dòng tiêu 
 đề của hàm) 
Default outside of switch Sử dụng default bên ngoài switch 
Division by zero Lỗi chia cho 0 
do statement must have while Câu lệnh do thiếu while 
do-while statement missing ( Câu lệnh do - while thiếu ( 
do-while statement missing ) Câu lệnh do - while thiếu ) 
do-while statement missing ; Câu lệnh do - while thiếu ; 
Duplicate case Sử dụng trùng case 
Enum syntax error Lỗi cú pháp câu lệnh enum 
Expression expected Thiếu biểu thức 
Expression syntax Biểu thức sai cú pháp 
File name too long Tên file quá dài 
For statement missing ( Câu lênh for thiếu ( 
For statement missing ) Câu lênh for thiếu ) 
For statement missing ; Câu lênh for thiếu ; 
Function call missing ) Lời gọi hàm thiếu ) 
Goto statement missing label Câu lệnh goto thiếu nhãn 
Identifier expected Ch•a khai báo 
 Trang - 249 - 
Lập trình h•ớng đối t•ợng 
If statement missing ( Câu lênh if thiếu ( 
If statement missing ) Câu lênh if thiếu ) 
Illegal initialization Khởi tạo không hợp lệ 
Illegal use of floating point Sử dụng dấu phẩy động không hợp lệ 
Illegal use of pointer Sử dụng con trỏ không hợp lệ 
Lvalue required Sử dụng sai toán tử quan hệ 
Misplaced break Sử dụng break sai vị trí 
Misplaced continue Sử dụng continue sai vị trí 
Misplaced else Sử dụng else sai vị trí 
operator -> must return a pointer or a toán tử -> phải trả về một con trỏ 
 class hoặc một lớp 
operator [] missing ] toán tử [] thiếu ] 
operator delete must return void toán tử delete phải trả về void 
Operator must be declared as function toán tử phải đ•ợc khai báo nh• hàm 
Operators may not have default toán tử có thể không có đối có giá trị 
 argument values ngầm định 
'operator' must be declared with one or toán tử phải đ•ợc khai báo với một 
 no parameters tham số hoặc không có tham số 
'operator' must be declared with one or toán tử phải đ•ợc khai báo với một 
 two parameters tham số hoặc hai tham số 
Pointer to structure required on left side Bên trái của -> hoặc ->* phải là con 
 of -> or ->* trỏ cấu trúc 
Statement missing ; Câu lệnh thiếu ; 
Structure required on left side of . or .* Bên trái của . hoặc .* phải là biến cấu 
 trúc 
Structure size too large Kích th•ớc của kiểu cấu trúc quá lớn 
Switch statement missing ( Câu lênh switch thiếu ( 
 Trang - 250 - 
Lập trình h•ớng đối t•ợng 
Switch statement missing ) Câu lênh switch thiếu ) 
Too few parameters in call Quá nhiều tham số trong lời gọi 
Too few parameters in call to function Quá nhiều tham số trong lời gọi hàm 
Unexpected } Thừa } 
While statement missing ( Câu lệnh while thiếu ( 
While statement missing ) Câu lệnh while thiếu ) 
Abnormal program termination Ngắt ch•ơng trình một cách bất 
 th•ờng 
Divide error Lỗi trong phép chia 
Null pointer assignment Gán con trỏ NULL 
Stack overflow Tràn Stack 
Command arguments too long Đối dòng lệnh quá dài 
Command syntax error Lỗi cú pháp của câu lệnh 
Command too long Câu lệnh quá dài 
Expression syntax error in !if statement Lỗi cú pháp trong biểu thức của câu 
 lệnh if 
File name too long Tên file quá dài 
If statement too long Câu lệnh if quá dài 
Illegal character in constant expression Sử dụng ký tự trong biểu thức không 
 'expression' hợp lệ 
int and string types compared So sanh số nguyên và xâu ký tự 
No closing quote Thiếu dấu " 
No file name ending Thiếu dấu kết thúc tên file 
Unable to open include file 'filename' Không mở đ•ợc tệp bao hàm (Có thể 
 sai đ•ờng dẫn) 
Unexpected end of file Thiếu dấu kết thúc ch•ơng trình } 
 Trang - 251 - 
Lập trình h•ớng đối t•ợng 
Unknown preprocessor statement Không hiểu câu lệnh tiền xử lý 
Unable to open file 'filename' Không mở đ•ợc file (Có thể sai 
 đ•ờng dẫn) 
Unable to open 'dpmimem.dll' Không mở đ•ợc file dpmimem.dll 
Write failed, disk full? Lỗi ghi đĩa, có thể đĩa bị đầy 
Terminated by user Bị ngắt bởi ng•ời sử dụng 
Switch statement missing ( Câu lệnh switch thiếu dấu ( 
Switch statement missing ) Câu lệnh switch thiếu dấu ) 
Template argument must be a constant Tham số sử dụng trong khuôn hình 
 expression phải là một biểu thức hằng 
Templates must be classes or functions Khuôn hình phải là các lớp hoặc các 
 hàm 
The constructor 'constructor' is not Hàm tạo không hợp lệ 
 allowed 
The value for 'identifier' is not within Giá trị của biến nằm ngoài tập giá trị 
 the range of an int của kiểu int 
'this' can only be used within a member Con trỏ this chỉ đ•ợc sử dụng trong 
 function các hàm thành phần (ph•ơng thức) 
Too few arguments in template class Có quá nhiều tham số trong tên của 
 name 'template' khuôn hình lớp 
Too few parameters in call Có quá nhiều tham số trong lời gọi 
Use . or -> to call function Sử dụng dấu . hoặc dấu -> để gọi hàm 
Use . or -> to call 'member', or & to take Sử dụng dấu . hoặc dấu -> để lấy giá 
 its address trị hoặc sử dụng dấu & để lấy địa chỉ 
Use :: to take the address of a member Sử dụng toán tử phạm vi :: để xác 
 function định hàm thành phần của lớp 
 Trang - 252 - 
Lập trình h•ớng đối t•ợng 
 Tài liệu tham khảo 
1. Ali Bahrami, “Object-oriented Systems Development”, McGraw-Hill Companies 
Inc., 1999. 
2. Bruce Eckel, “Thinking in C++”, Prentice Hall Inc., 2000. 
3. Budd, Timothy, “An Introduction to Object-Oriented Programming”, Addison-
Wesley, 1997. 
4. Robert Lafore, “Object-oriented Programming in C++”, SAMS, 2001. 
5. Scott Robert Ladd, “C++ Kỹ Thuật và ứng Dụng”, Khoa Học Kỹ Thuật, 1992. 
6. Sharam Hekmat, “C++ Programming”, Pragmatix Software Pt, 2004. 
7. Phạm Văn Ất. C++ và lập trỡnh hướng đối tượng. Nhà xuất bản khoa học kỹ thuật. 
2000. 
8. Trần Văn Lăng. Lập trỡnh hướng đối tượng C++. Nhà xuất bản thống kờ. 1997. 
9. Lờ Đăng Hưng, Tạ Tuấn Anh, Nguyễn Hữu Đức, Nguyễn Thanh Thuỷ. C++ và 
lập trỡnh hướng đối tượng với C++. Nhà xuất bản khoa học kỹ thuật. 1999. 
10. Ngụ Trung Việt. Ngụn ngữ lập trỡnh C++. Nhà xuất bản giao thụng vận tải. 
1999. 
11. PGS.TS Trần Đỡnh Quế, KS. Nguyễn Mạnh Hựng. Ngụn ngữ lập trỡnh C++. 
Học viện bưu chớnh viễn thụng. 2006. 
 Trang - 253 - 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_huong_doi_tuong_phan_2.pdf