Bài giảng lập trình hướng đối tượng - Huỳnh Thị Thu Thủy
-Kiểu số nguyên: int -Kiểu số thực: float -Kiểu số nguyên dài: long -Kiểu kí tự: char -Kiểu chuỗi: char
Bạn đang xem trước 20 trang tài liệu Bài giảng lập trình hướng đối tượng - Huỳnh Thị Thu Thủy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
5/10/2013
1
BÀI GiẢNG
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Giảng viên: Huỳnh Thị Thu Thủy
Số tiết lý thuyết: 45
Số tiết thực hành: 30
Tài liệu tham khảo
1. Lập trình hướng đối tượng C++,Trần Văn
Lă hâ iệ Cô hệ thô ting, p n v n ng ng ng n
TPHCM, NXB Thống kê, 1996
2. Giáo trình ngôn ngữ lập trình hướng đối
tượng với C++, Nguyễn Chí Trung, NXB
Hà Nội, 2005
5/10/2013 2ThS. Huỳnh Thị Thu Thuỷ
Giới thiệu
• Chương 1: Tổng quan về lập trình hướng đối
tượng.
• Chương 2: Lớp và thực thể.
• Chương 3: Quá tải hàm.
• Chương 4: Quá tải toán tử.
• Chương 5: Tính thừa kế.
• Chương 6: Hệ thống nhập xuất C++ .
• Chương 7: Sự kết nối động.
• Chương 8: Hàm và lớp chung
35/10/2013 ThS. Huỳnh Thị Thu Thuỷ
Chương 1: Tổng quan về
lập trình hướng đối tượng
1. Giới thiệu ngôn ngữ C++
2. Lập trình hướng đối tượng là gì
3. Các ngôn ngữ và ứng dụng OOP
4. Sự đóng kín (Encapsulation)
5 Tính đa hình (Polymorphism).
6. Tính thừa kế (Inheritance)
7. Phương thức ảo (Virtual method)
45/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
2
1. Giới thiệu ngôn ngữ C++
a. Các kiểu dữ liệu cơ bản
ể ố- Ki u s nguyên: int
- Kiểu số thực: float
- Kiểu số nguyên dài: long
- Kiểu kí tự: char
- Kiểu chuỗi: char *
55/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
b. Khai báo dữ liệu
Khai báo biến
Cú pháp: ;
Ví dụ:
• Biến nguyên a: int a;
• Biến thực x,y: float x,y;
• 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ớ
65/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Các vị trí khai báo biến
- Bắt đầu của một khối:
- VD: void main()
{ int n; …. ; float b; }
- Bên ngoài hàm:
- VD: int n;
void main() { … }
- Đối số hàm:
- VD: long giaithua( int n ) { … }
75/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Khai báo hằng
• Cách 1:
const = ;
- Ví dụ:
const float PI=3.1416;
const max=100;//mac nhien int
const char * st=“Tin hoc”;
85/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
3
1. Giới thiệu ngôn ngữ C++ (tt)
• Cách 2:
#d fi tê hằ iá t ị hằe ne
- Ví dụ:
#define PI 3.1416
#define max 100
#define st “Tin hoc”
95/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
c. Xuất nhập dữ liệu
Lệnh xuất: Sử dụng toán tử chèn(<<) kết hợp
với luồng xuất cout.
– Cần khai báo file tiêu đề iostream.h
– Ví dụ:
• In ra màn hình dòng chữ: “Tin hoc”
cout<<“Tin hoc”;
• In ra màn hình “BORLAND C++”
“VERSION 4.5”
cout<<“BORLAND C++\nVERSION 4.5”
• In nội dung 2 biến a,b: cout<<a<<b;
105/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Lệnh nhập: Sử dụng toán tử chiết (>>)kết
hợp với luồng nhập cin.
ầ ề– C n khai báo file tiêu đ iostream.h
– Ví dụ:
• Nhập số nguyên a:
cin>>a;
• Nhập 2 số thực x,y:
cin>>x>>y;
• Nhập chuỗi st:
cin>>st; //chuỗi nhập không có khoảng trắng
gets(st); // chuỗi nhập có khoảng trắng
file tiêu đề stdio.h
115/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
d. Cấu trúc điều khiển
Cấu trúc if
if ()
{ ; }
else { ; }
Ý nghĩa: Nếu có giá
trị khác 0 thì thực hiện
ngược lại thực hiện .
125/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
4
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.
Cho biết số đó là chẵn hay lẻ .
#include
main()
{ int n;
cout>n;
if (n>0)
if (n%2 ==0) cout<<“n chan”;
else cout<<“n le”;
else cout<<“khong xet”;
return 0; }
135/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 2: Viết CT nhập vào 3 số nguyên a,b,c. Cho
biết giá trị số lớn nhất.
#include
main()
{ int a,b,c;
cout>a>>b>>c;
if (a>b)
if (a>c) cout<<“so lon nhat la”<<a;
else cout<<“so lon nhat la”<<c;
else if (b>c) cout<<“so lon nhat la”<<b;
else cout<<“so lon nhat la”<<c;
return 0; }
145/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Cấu trúc switch … case
switch ()
{ case : {; break;}
case : ; break;
. . .
case : ; break;
default: ;
}
155/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Ví dụ: Viết CT nhập một số nguyên từ 1 đến 7.
Cho biết thứ tương ứng với số trong tuần.
#i l d i t hnc u e
main()
{ int so; cout>so;
switch(so)
{ case 1: cout<<“Chu nhat”; break;
…
case 7: cout<<“Thu bay”; break;
default: cout<<“Khong xet”;
}
return 0; }
165/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
5
1. Giới thiệu ngôn ngữ C++ (tt)
Cấu trúc for
for (; ; )
{ ; }
Trong đó:
+ : câu lệnh khởi tạo giá trị ban đầu cho biến chạy .
+ : đ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ị .
175/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
• Lưu đồ cấu trúc for
Vào
Sai (=0)
Ra
Đúng (0)
185/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 1: Viết CT in các số từ 1 đến n
#i l d i hnc u e
main()
{ int n;
cout>n;
if (n>0)
for (int i=1; i<=n; i++)
cout<<i<<“ ”;
return 0; }
195/10/2013 ThS. Huỳnh Thị Thu Thuỷ
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
ra màn hình số chẵn <=n trên 1 dòng, số lẻ <=n
trên dòng khác .
#include
void main()
{ int n; cout>n;
if (n>0)
{ for (int i=2; i<=n; i++)
if (i%2==0) cout<<i<<“ ”;
cout<<“\n”;
for (int i=1; i<=n; i++)
if (i%2!=0) cout<<i<<“ ”; }
else cout<<“Khong xet”; }
205/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
6
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.
#include.
void main()
{ int n; cout>n;
float lthua=1;
if (n>0)
for (int i=1; i<=n; i++)
lthua=lthua*2;
else
for (int i=1; i<=n; i++)
lthua=lthua/2;
cout<<“Kqua:”<<lthua; }
215/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Cấu trúc while
ểwhile ()
{ ; }
Ví dụ 1: Đoạn CT in các số từ 1 đến n.
i=1;
while (i<=n)
{ cout<<i<“ ”;
i++; }
225/10/2013 ThS. Huỳnh Thị Thu Thuỷ
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
ra màn hình n số nguyên dương lẻ đầu tiên .
#include
void main()
{ int i, n;
cout>n;
if (n>0)
{ i 1 = ;
while (i<=2*n-1)
{ cout<<i<<“ ”; i=i+2;
}
}
235/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 3: Viết CT nhập số nguyên dương n. Cho
biết n có là số nguyên tố không .
#include
void main()
{ int i, n; cout>n;
if (n>1)
{ i=2;
hile (n % i ! 0) i++w = ;
if (i==n) cout<<n<<“ la nguyen to”;
else cout<<n<<“ khong nguyen to”;
}
else cout<<n<<“khong nguyen to”; }
245/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
7
1. Giới thiệu ngôn ngữ C++ (tt)
Cấu trúc do…while
do { ;
} while ();
Ví dụ 1: Đoạn CT kiểm tra việc nhập DTB với
thang điểm 10.
do {
cout>dtb;
} while (dtb10);
255/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
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
có bao nhiêu số âm và số dương đã nhập.
#include
void main()
{ int x, sd=0, sa=0;
do { cout>x;
if (x>0) sd++;
else
if (x<0) sa++; } while (x!=0);
cout<<“\n So so duong:<<sd;
cout<<\n So so am:<<sa; }
265/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
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
có bao nhiêu số đã nhập.
#include
void main()
}
275/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1. Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 3: Viết CT lặp lại nhiều lần việc nhập 1 số
thực x. Việc nhập kết thúc khi không muốn nhập
nữa Cho biết có bao nhiêu số thực đã nhập. .
#include
void main()
{ float x; int so=0; char Traloi;
do {
cout>x;
so++;
cout<<“Nhap so thuc tiep khong (T/K):”;
cin>>Traloi;
} while (Traloi==‘T’ ||Traloi==‘t’ );
cout<<“\n So so thuc da nhap:<<so;
}
285/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
8
1. Giới thiệu ngôn ngữ C++ (tt)
e. Xây dựng hàm
()
{
[ return ;]
}
Ví dụ: Khai báo và định nghĩa hàm sau:
Hàm tính n giai thừa:
long gthua(int n)
{ …. }
Hàm nhập dãy n số thực
void nhapday2 (float a[ ], int n)
{ ….. }
295/10/2013 ThS. Huỳnh Thị Thu Thuỷ
2- Lập trình hướng đối tượng là gì
• Lập trình hướng đối tượng (Object
O i t d i OOP) là kh hr en e programm ng - uyn
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
chương trình.
• Thực chất đây không phải là 1 phương
pháp lập trình mới mà là một cách nhìn
mới trong lập trình.
305/10/2013 ThS. Huỳnh Thị Thu Thuỷ
2- Lập trình hướng đối tượng là gì(tt)
• Theo lập trình hướng cấu trúc (thủ tục):
CTDL + Thuật giải = Chương trình
• Theo lập trình hướng đối tượng
Phương thức + Dữ liệu = Đối tượng
315/10/2013 ThS. Huỳnh Thị Thu Thuỷ
3- Các ngôn ngữ và ứng dụng OOP
• Xuất phát từ tư tưởng của ngôn ngữ SIMULA67
(phát triển vào năm 1960).
• 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
SMALLTALK.
• 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#.
325/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
9
3- Các ngôn ngữ và ứng dụng OOP(tt)
• Chính XEROX, trên cơ sở ngôn ngữ OOP của
mình đã đề ra tư tưởng giao tiếp hình tượng
( f )trên màn hình icon base screen inter ace .
• Apple Macintosh, Microsoft Windows phát triển
giao tiếp đồ hoạ như hiện nay.
• 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
Menu, Control Menu Box, Title Bar,…sẽ đáp
ứng công việc tuỳ theo đặc tính của mình.
335/10/2013 ThS. Huỳnh Thị Thu Thuỷ
4- Sự đóng kín (Encapsulation)
• Sự đóng kín: Cơ chế liên kết mã và dữ liệu
mà nó thao tác, giữ cho cả 2 được an toàn
khỏi sự can thiệp từ bên ngoài hoặc do sử
dụng sai.
Mã + Dữ liệu
• Trong 1 đối tượng: mã hoặc dữ liệu hoặc cả
2 có thể là của riêng đối tượng đó hoặc
chung.
345/10/2013 ThS. Huỳnh Thị Thu Thuỷ
4- Sự đóng kín (tt)
• Nếu mã hoặc dữ liệu là riêng thì nó chỉ có thể
được truy cập bởi bộ phận của đối tượng ,
không được truy cập bởi thành phần khác
của chương trình tồn tại ngoài đối tượng.
• Khi mã hoặc dữ liệu là chung, các bộ phận
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
cấp 1 giao diện có điều khiển cho các thành
phần riêng của đối tượng.
355/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5- Tính đa hình (Polymorphism)
• Tính đa hình: Tính chất cho phép 1 tên được
dùng cho 2 hay nhiều mục đích khác nhau.
• Mục đích của tính đa hình trong OOP: cho
phép 1 tên được dùng để chỉ rõ 1 lớp tác
động tổng quát.
• Trong lớp tác động tổng quát 1 tác động cụ ,
thể được xác định bởi loại dữ liệu.
• Ví dụ: Hàm abs(n) trong C++.
365/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
10
5- Tính đa hình (tt)
• Khái niệm tính đa hình chính là ý tưởng 1
giao diện nhiều phương pháp .
• Ưu điểm của tính đa hình: giảm tính phức
tạp.
• Tính đa hình được áp dụng cho hàm và
toán tử: Quá tải hàm; Quá tải toán tử.
375/10/2013 ThS. Huỳnh Thị Thu Thuỷ
6- Tính thừa kế (Inheritance)
• Tính thừa kế: Quá trình 1 đối tượng có thể
có được các tính chất của đối tượng khác.
• Một đối tượng có thể kế thừa các tính chất
tổng quát để bổ sung thêm các đặc điểm
của nó.
Thừa kế
Đối tượng A có x,y
B có x,y,z,t
Đối tượng B có z,t
385/10/2013 ThS. Huỳnh Thị Thu Thuỷ
6- Tính thừa kế(tt)
• Nếu không thừa kế, mỗi đối tượng sẽ phải
đị h hĩ i đặ t ó liê đến ng a mọ c rưng c n quan n
nó.
• Ví dụ: Đối tượng A có hàm nhap, xuat
Đối tượng B giống đối tượng A có
hàm nhap, xuat và hàm xu ly _
• Nếu B không thừa kế A: Khi xây dựng B
ta phải xây dựng cả 3 hàm nhap, xuat và
hàm xu_ly
395/10/2013 ThS. Huỳnh Thị Thu Thuỷ
7- Phương thức ảo (Virtual method)
• Phương thức ảo: Phương thức sẽ mang nội
dung cụ thể vào lúc thực hiện CT.
• 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
ảo(Virtual method table – VMT).
• Khi CT thực hiện, các phương thức ảo sẽ
được gọi từ bảng phương thức ảo này.
• Đây là kỹ thuật kết nối động(dynamic binding)
– kết nối trễ(late binding).
405/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
11
Bài tập chương 1
1. Viết chương trình tính n!
2. Viết chương trình tính tổng n số nguyên
dương chẵn đầu tiên.
3. Viết chương trình tính tổng n số nguyên
dương lẻ đầu tiên.
4. Viết chương trình tìm ước số chung lớn
nhất của 2 số nguyên dương m n , .
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ó
bao nhiêu ngày.
415/10/2013 ThS. Huỳnh Thị Thu Thuỷ
Chương 2: Lớp và thực thể
1.Lớp và thực thể
2.Hàm tạo – Hàm huỷ
3.Con trỏ đối tượng
4.Các hàm nội tuyến
5.Gán – Truyền – Trả đối tượng về từ hàm
6.Giới thiệu các hàm friend
425/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1- Lớp và thực thể
a. Lớp (class): Thực chất là 1 kiểu dữ liệu
được định nghĩa trong CT.
• Lớp gồm 2 thành phần: Dữ liệu và
phương thức.
• Các thành phần của lớp có thể có 1 trong
3 thuộc tính:
private
protected
public
435/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1- Lớp và thực thể(tt)
b. Thực thể (Instance) – đối tượng: là biến kiểu
lớp. Muốn sử dụng lớp phải khai báo đối tượng
thuộc lớp.
• Định nghĩa lớp:
class
{ // dữ liệu
//phương thức, hàm thành phần
};
Đị h hĩ h thứ ài kh i bá lớ• n ng a p ương c ngo a o p
::(đối số)
{ //thân hàm
[ return ;]
}
445/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
12
1- Lớp và thực thể(tt)
• Khai báo đối tượng thuộc lớp:
;
• Ví dụ 1: Lớp sample có 1 vùng dữ liệu nguyên.
Các phương thức: nhap, xuat.
class sample
{ int a;
public:
void nhap() { cout>a; }
void xuat() { cout<<“a=“<<a; }
};
void main()
{ sample ob; ob.nhap(); ob.xuat();}
455/10/2013 ThS. Huỳnh Thị Thu Thuỷ
1- Lớp và thực thể(tt)
• 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
{ int a, b;
public:
void nhap();
void xuat();
};
void sample:: nhap() { cout>a>>b; } ,
void sample::xuat() { cout<<“a=”<<a<<“; b=” <<b; }
void main()
{ sample ob; ob.nhap(); ob.xuat(); }
• Ví dụ 3: Xây dựng lớp TOADO.
465/10/2013 ThS. Huỳnh Thị Thu Thuỷ
2- Hàm tạo – Hàm huỷ
a. Hàm tạo - Phương thức thiết lập(Constructor)
ế• Phương thức thi t lập(PTTL) là phương thức
đặc biệt của lớp nhằm thực hiện các công việc
ban đầu như: cấp phát vùng nhớ, khởi tạo giá
trị ban đầu, mở tập tin…
• Ví dụ1:
class sample { int a;
public: sample(){a=0; cout<<“constructor”;}
…..
};
475/10/2013 ThS. Huỳnh Thị Thu Thuỷ
2- Hàm tạo – Hàm huỷ(tt)
• Ví dụ 2:
class sample
{ i t b bli n a, ; pu c:
sample(){a=b=0; cout<<“constructor”;}
sample(int x){a=b=x; cout<<“constructor”;}
sample(int x, int y) {a=x; b=y;
cout<<“constructor”;}
nhap() { cout>a>>b; }
void xuat() { cout<<“a=”<<a<<“; b=” <<b; }
};
485/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
13
2- Hàm tạo – Hàm huỷ(tt)
• Đặc điểm của PTTL:
– PTTL có tên trùng tên lớp
– Không có giá trị trả về
– Có thể có 1 hoặc nhiều tham số hoặc không có
tham số nào.
– Một lớp có thể không có hoặc có 1 hoặc nhiều ,
PTTL
– PTTL được tự động gọi khi khai báo đối tượng
thuộc lớp.
495/10/2013 ThS. Huỳnh Thị Thu Thuỷ
2- Hàm tạo – Hàm huỷ(tt)
• Hàm huỷ - Phương thức huỷ bỏ (Destructor)
• Phương thức huỷ bỏ (PTHB) là phương thức
đặ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ở.
• Ví dụ:
class sample
{ int a;
public:
sample() {cout<<“\n Constructor”;} //PTTL
~ sample() {cout<<“\n Destructor”;} //PTHB
};
505/10/2013 ThS. Huỳnh Thị Thu Thuỷ
2- Hàm tạo – Hàm huỷ(tt)
• Đặc điểm của PTHB:
ấ– PTHB có tên trùng tên lớp và có d u
– Không có giá trị trả về
– Không có tham số nào.
Một lớp có thể không có hoặc có 1 PTHB– ,
– PTHB được tự động gọi khi kết thúc sự tồn tại
của đối tượng thuộc lớp.
515/10/2013 ThS. Huỳnh Thị Thu Thuỷ
3- Con trỏ đối tượng
• Truy các thành viên của đối tượng: dùng toán
tử chấm điểm ( ) . .
• Dùng toán tử -> để truy cập thành viên của
đối tượng: cần khai báo con trỏ đối tượng.
• Cú pháp: *;
• VD: sample *ob1, ob2;
ob1=&ob2;
ob1->xuat();
525/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
14
4- Các hàm nội tuyến
a. Hàm nội tuyến
- Khai báo hàm nội tuyến: Đặt trước định
nghĩa hàm chỉ định inline.
- Hàm nội tuyến thi hành nhanh hơn các
hàm thông thường.
- Hàm ngắn khai báo nội tuyến.
535/10/2013 ThS. Huỳnh Thị Thu Thuỷ
4- Các hàm nội tuyến(tt)
Ư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
và cơ chế trả về.
Tuỳ vào trình biên dịch, có nhiều hạn chế
áp dụng cho hàm nội tuyến.
Nếu 1 hạn chế nội tuyến bị vi phạm, trình
biên dịch sẽ tạo ra 1 hàm bình thường.
545/10/2013 ThS. Huỳnh Thị Thu Thuỷ
4- Các hàm nội tuyến(tt)
Những qui định về nội tuyến:
Hàm không có cấu trúc lặp
Không có lệnh nhảy goto
Không có lệnh gọi đệ quy
555/10/2013 ThS. Huỳnh Thị Thu Thuỷ
4- Các hàm nội tuyến(tt)
Ví dụ:
class sample
{ int a,b;
public:
sample(int x, int y);
long square();
};
inline sample::sample(int x, int y) { a=x; b=y;}
inline long sample::square() { return a*a+b*b;
}
565/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
15
5- Gán – Truyền – Trả đối
tượng về từ hàm
• Các đối tượng có thể được sử dụng
tương tự các biến kiểu bất kỳ.
• Có thể thực hiện gán các đối tượng cùng
kiểu mà vùng dữ liệu của nó thuộc kiểu có
thể thực hiện được phép toán gán.
• Đối tượng có thể: đối số hàm, kết quả trả
về của 1 hàm
575/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5- Gán – Truyền – Trả đối
tượng về từ hàm(tt)
• Ví dụ:
class Toado
{ int x, y; public:
void nhap() { cin>>x>>y; }
void xuat() {cout<<“(“<<x<<“,”<<y<<“)”;}
Toado cong(Toado ob1, Toado ob2)
{ Toado tempt;
tempt x=ob1 x+ob2 x;
void main()
. . .
tempt.y=ob1.y+ob2.y;
return tempt ;
}
};
{Toado b1,ob2,ob3;
ob1.nhap();ob2.nhap();
ob3=ob3.cong(ob1,ob2);
ob3.xuat(); }
585/10/2013 ThS. Huỳnh Thị Thu Thuỷ
6- Giới thiệu các hàm friend
• Một hàm nếu không là hàm thành viên của lớp
sẽ không truy cập được các thành phần riêng
của lớp.
• Một loại hàm trong C++ hỗ trợ truy cập được
các thành phần riêng của lớp: hàm friend.
• Hàm friend không là hàm thành phần của lớp.
• Hàm friend được định nghĩa giống hàm bình
thường nhưng phần khai báo bên trong lớp có
từ khoá friend.
595/10/2013 ThS. Huỳnh Thị Thu Thuỷ
6- Giới thiệu các hàm friend(tt)
• Ví dụ 1: Hàm friend của 1 lớp
l l
void main()
c ass myc ass
{ int a;
public:
myclass() { a=0; }
myclass(int x) { a=x; }
id h () { t }
{ myclass ob(4), ob(6);
cout<<sqr(ob1)<<endl;
cout<<sqr(ob2)<<endl;
ob1.show();
cout<<“\n”;
ob2.show();
vo s ow cou <<a;
friend long sqr(myclass ob);
};
long sqr(myclass ob) { return ob.a*ob.a; }
}
605/10/2013 ThS. Huỳnh Thị Thu Thuỷ
5/10/2013
16
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
class struck;
class car
{ int num, speed;
public:
void get(int a, int b) { num=a;speed=b; }
void put() { cout<<“num:”<<num;
cout<<“speed:”<<speed; }
friend int greater(car ob1, struck ob2); };
615/10/2013 ThS. Huỳnh Thị Thu Thuỷ
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(tt)
class str ck u
{ int num, speed;
public:
void get(int a, int b) { num=a;speed=b; }
void