Bài giảng Giới thiệu lập trình - Bài 11: Hàm - Nâng cao

Toán Tử Nạp Chồng 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ìnhTemplate – Giới Thiệu 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ìnhTemplate – Giới Thiệu template T _getMax ( T so1 , T so2 ) { if ( so1 < so2 ) return so2; return so1; } int main() { PS ps1 , ps2 , psMax; psMax = _getMax ( ps1 , ps2 ) ; }

pdf19 trang | Chia sẻ: thucuc2301 | Lượt xem: 637 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bài giảng Giới thiệu lập trình - Bài 11: Hàm - Nâng cao, để 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

Các file đính kèm theo tài liệu này:

  • pdfts_le_nguyen_khoibaigiang11_hamnangcao_8999_2032122.pdf