Xem mẫu
- 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
- 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
- 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
- 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/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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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