Bài giảng Giới thiệu lập trình - Hàm - nâng cao - Lê Nguyên Khôi

Tóm tắt Bài giảng Giới thiệu lập trình - Hàm - nâng cao - Lê Nguyên Khôi: ... 6 void _trungDiem ( const ToaDo & td1 , const ToaDo & td2 , ToaDo & trungDiem ) { trungDiem.x = ( td1.x + td2.x ) / 2; trungDiem.y = ( td1.y + td2.y ) / 2; } ToaDo * _trungDiem ( const ToaDo & td1 , const ToaDo & td2 ) { ToaDo * trungDiem = new ToaDo; (*trungDiem).x = ( td1.x + td2.x ) / ...ouble , double ) ;  Dựa trên kiểu tham số để gọi hàm tương ứng  Tại sao không sử dụng chuyển đổi kiểu tự động Kiểu trả về không đúng Nguy hiểm  _tong(1,2) gọi int _tong(int, int);  _tong(1.0,2.0) gọi double _tong(double, double); Giới Thiệu Lập Trình Hàm Nạp Chồng 10  Khác kiểu tham...ts * ps2.ms == ps2.ts * ps1.ms ) ; } bool operator != ( const PS & , const PS & ) ; Giới Thiệu Lập Trình Toán Tử Nạp Chồng 13 struct PS { int ts , ms ; } ; bool operator == ( const PS & , const PS & ) ; bool operator != ( const PS & , const PS & ) ; int main() { PS ps1 , ps2 ; // nhập...

pdf19 trang | Chia sẻ: havih72 | Lượt xem: 275 | Lượt tải: 1download
Nội dung tài liệu Bài giảng Giới thiệu lập trình - Hàm - nâng cao - Lê Nguyên Khôi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Giới Thiệu Lập Trình
Hàm – Nâng Cao
TS. Lê Nguyên Khôi
Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
 Nhắc lại Hàm – Cơ Bản
 Nạp chồng hàm
 Nạp chồng toán tử
Giới Thiệu Lập Trình
Hàm – Cơ Bản
2
 Khai báo hàm
int bin ( int , int ) ;
 Định nghĩa hàm
int bin ( int so1 , int so2 ) {
// thân hàm miêu tả định nghĩa
// không khai báo lại so1 , so2
}
 Chữ ký hàm
int bin ( int , int )
 Lời gọi hàm
int a = bin ( so1 , so2 ) ;
 Sử dụng tên hàm, tên tham số, không có kiểu
Giới Thiệu Lập Trình
Hàm – Cơ Bản – Truyền Tham Số
3
 Truyền giá trị
int bin ( int , int ) ;
 Tạo và truyền một bản sao > tốn chi phí
 Thay đổi bản sao , bản gốc ngoài hàm không đổi
 Xóa bản sao khi kết thúc hàm
 Truyền tham chiếu
int bin ( int & , int & ) ;
 Chính bản gốc được truyền (địa chỉ bản gốc)
 Thay đổi trong hàm, bản gốc thay đổi
 Không xóa bản gốc khi kết thúc hàm
Giới Thiệu Lập Trình
Hàm – Cơ Bản – Sử Dụng const
4
 Truyền tham chiếu
int bin ( int & , int & ) ;
 Thay đổi trong hàm, bản gốc thay đổi
 Không muốn hàm thay đổi, sử dụng từ khóa const
 Bảo vệ dữ liệu, không cho thay đổi, dữ liệu “chỉ-đọc”
int bin ( const int & , const int & ) ;
 Quy ước:
 Luôn truyền tham chiếu
 Dữ liệu không thay đổi, dùng const
 Dữ liệu thay đổi, không dùng const
Giới Thiệu Lập Trình
Hàm Nạp Chồng (Function Overloading)
5
 Các hàm thực hiện công việc tương tự
 Trùng tên, nhưng khác nhau về tham số
 Số lượng tham số
 Kiểu tham số
 Xác định hàm nào được gọi:
 Sử dụng thông tin về tham số
Số lượng & kiểu tham số
 Kiểu của hàm
Giới Thiệu Lập Trình
Hàm Nạp Chồng – Ví Dụ
6
void _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ,
ToaDo & trungDiem ) {
trungDiem.x = ( td1.x + td2.x ) / 2;
trungDiem.y = ( td1.y + td2.y ) / 2;
}
ToaDo * _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ) {
ToaDo * trungDiem = new ToaDo;
(*trungDiem).x = ( td1.x + td2.x ) / 2;
(*trungDiem).y = ( td1.y + td2.y ) / 2;
return trungDiem;
}
Giới Thiệu Lập Trình
Hàm Nạp Chồng
7
 Khác số lượng tham số
 Hàm tính tổng các số truyền vào
 Tính tổng 3 số nguyên
int _tong ( int , int , int ) ;
 Tính tổng 2 số nguyên
int _tong ( int , int ) ;
 Tính tổng 1 số nguyên
int _tong ( int ) ;
 Dựa trên số lượng tham số để gọi hàm tương ứng
Giới Thiệu Lập Trình
Hàm Nạp Chồng
8
 Tham số mặc định
int _tong(int so1, int so2 = 0, int so3 = 0)
{
return so1 + so2 + so3;
}
 Có thể gọi
_tong ( 1 , 2 , 3 )
_tong ( 1 , 2 )
_tong ( 1 )
 Có định nghĩa hàm int _tong ( int , int )
 _tong ( 1 , 2 ) gọi hàm nào
Giới Thiệu Lập Trình
Hàm Nạp Chồng
9
 Khác kiểu tham số
 Hàm tính tổng 2 số truyền vào
int _tong ( int , int ) ;
double _tong ( double , double ) ;
 Dựa trên kiểu tham số để gọi hàm tương ứng
 Tại sao không sử dụng chuyển đổi kiểu tự động
Kiểu trả về không đúng
Nguy hiểm
 _tong(1,2) gọi int _tong(int, int);
 _tong(1.0,2.0) gọi double _tong(double, double);
Giới Thiệu Lập Trình
Hàm Nạp Chồng
10
 Khác kiểu tham số
 Hàm tính tổng 2 số truyền vào
double _tong ( int , double ) ; 
double _tong ( double , int ) ;
 Dựa trên kiểu tham số để gọi hàm tương ứng
 Sử dụng chuyển đổi kiểu tự động
_tong ( 3 , 3 ) hoặc _tong ( 3.5 , 3.5 )
 Gọi hàm nào
 Thêm đầy đủ
int _tong ( int , int ) ;
double _tong ( double , double ) ;
Giới Thiệu Lập Trình
Toán Tử
11
 Toán tử thực chất là hàm
 Sử dụng toán tử giống lời gọi hàm
 Viết theo một cách khác
 Ví dụ: so sánh bằng
 1 == 2 thực chất == ( 1 , 2 )
Giới Thiệu Lập Trình
Toán Tử Nạp Chồng
12
 Giống như hàm, toán tử cũng có thể nạp chồng
 Định nghĩa toán tử cho kiểu dữ liệu mới
 Nạp chồng toán tử so sánh cho kiểu cấu trúc
struct PS { int ts , ms ; } ;
bool operator == ( const PS & ps1 ,
const PS & ps2 ) {
return ( ps1.ts * ps2.ms
== ps2.ts * ps1.ms ) ;
}
bool operator != ( const PS & ,
const PS & ) ;
Giới Thiệu Lập Trình
Toán Tử Nạp Chồng
13
struct PS { int ts , ms ; } ;
bool operator == ( const PS & ,
const PS & ) ;
bool operator != ( const PS & ,
const PS & ) ;
int main() {
PS ps1 , ps2 ;
// nhập dữ liệu 
if ( ps1 == ps2 ) 
if ( ps1 != ps2 ) 
}
Giới Thiệu Lập Trình
Toán Tử Nạp Chồng
14
struct PS { int ts , ms ; } ;
PS operator + ( const PS & ps1 ,
const PS & ps2 ) {
PS tongPS;
// cập nhật tongPS
return tongPS;
}
int main() {
PS ps1 , ps2 , tongPS ;
tongPS = ps1 + ps2 ;
}
Giới Thiệu Lập Trình
Toán Tử Nạp Chồng
15
struct PS { int ts , ms ; } ;
PS operator + ( const PS & ps ,
const int & i ) {
PS tongPS;
// cập nhật tongPS
return tongPS;
}
int main() {
PS ps , tongPS ;
tongPS = ps + 1 ;
}
Giới Thiệu Lập Trình
Toán Tử Nạp Chồng
16
ostream & operator << ( 
ostream & outStream , 
const PS & ps ) {
outStream << ps.ts << "/" << ps.ms ;
return outStream;
}
int main() {
PS ps , tongPS ;
tongPS = ps + 1 ;
cout << tongPS;
}
Giới Thiệu Lập Trình
Template – Giới Thiệu
17
int _getMax(int so1 , int so2) {
if (so1 < so2) return so2;
return so1;
}
double _getMax(double so1 , double so2) {
if (so1 < so2) return so2;
return so1;
}
PS _getMax(PS so1 , PS so2) {
if (so1 < so2) return so2;
return so1;
}
Giới Thiệu Lập Trình
Template – Giới Thiệu
18
template 
T _getMax ( T so1 , T so2 ) {
if ( so1 < so2 ) return so2;
return so1;
}
int main() {
PS ps1 , ps2 , psMax;
psMax = _getMax ( ps1 , ps2 ) ;
}
Giới Thiệu Lập Trình

File đính kèm:

  • pdfbai_giang_gioi_thieu_lap_trinh_ham_nang_cao_le_nguyen_khoi.pdf