1. Trang chủ
  2. » Công Nghệ Thông Tin

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

19 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 155,47 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Giới thiệu lập trình: Hàm nâng cao cung cấp cho người học các kiến thức: Nhắc lại hàm – cơ bản, nạp chồng hàm, nạp chồng toán tử. Đây là một tài liệu hữu ích dành cho các bạn sinh viên và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.

Trang 1

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

Trang 2

Nội Dung

 Nhắc lại Hàm – Cơ Bản

 Nạp chồng hàm

 Nạp chồng toán tử

Trang 3

Hàm – Cơ Bản

 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

Trang 4

Hàm – Cơ Bản – Truyền Tham Số

 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

Trang 5

Hàm – Cơ Bản – Sử Dụng const

 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

Trang 6

Hàm Nạp Chồng (Function Overloading)

 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

Trang 7

Hàm Nạp Chồng – Ví Dụ

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;

}

Trang 8

Hàm Nạp Chồng

 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

Trang 9

Hàm Nạp Chồng

 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

Trang 10

Hàm Nạp Chồng

 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);

Trang 11

Hàm Nạp Chồng

 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 ) ;

Trang 12

Toán Tử

 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 )

Trang 13

Toán Tử Nạp Chồng

 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 & ) ;

Trang 14

Toán Tử Nạp Chồng

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 ) … }

Trang 15

Toán Tử Nạp Chồng

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 ;

}

Trang 16

Toán Tử Nạp Chồng

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 ; }

Trang 17

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;

}

Trang 18

Template – 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;

}

Trang 19

Template – Giới Thiệu

template <class T>

T _getMax ( T so1 , T so2 ) {

if ( so1 < so2 ) return so2;

return so1;

}

int main() {

PS ps1 , ps2 , psMax;

psMax = _getMax<PS> ( ps1 , ps2 ) ; }

Ngày đăng: 08/05/2021, 15:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w