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 ) ;
}
19 trang |
Chia sẻ: thucuc2301 | Lượt xem: 637 | Lượt tải: 0
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:
- ts_le_nguyen_khoibaigiang11_hamnangcao_8999_2032122.pdf