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

Bài giảng lập trình hướng đối tượng chương 3 GV dương khai phong

53 179 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 53
Dung lượng 8,27 MB

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

Nội dung

 Hàm tại chỗ inline  Chương 3: Hàm phương thức: method và hàm đa năng trong OOP... Hàm được gọi ngay cả khi không có đối tượng nào được tạo bằng cách sử dụng toán tử phạm vi “::”  Cú

Trang 1

ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong

Số tiết lý thuyết: 45 tiết

Số tiết thực hành: 30 tiết

1

Trang 2

2

 Nội dung môn học:

Trang 3

 Hàm tại chỗ (inline)

 Chương 3: Hàm (phương thức: method) và hàm đa năng trong OOP

Trang 4

int getTuso(){return tuso;}

int getMauso(){return mauso;}

void setTuso(int tu){tuso=tu;}

void setMauso(int mau){mauso=mau;}

};

Trang 5

 Phương thức này thường được quy ước đặt tên theo dạng tiền tố (get/set/is ứng với từng loại truy vấn),tiếp theo là tên của thành viên dữ liệu

 Chương 3: Hàm và hàm đa năng trong OOP

Trang 6

 Hàm tại chỗ (inline)

hàm đa năng trong OOP

Trang 7

X(const X&); // Hàm khởi tạo sao chép

};

Trang 8

 Khi một đối tượng được khởi tạo từ

một đối tượng khác của cùng lớp

 Khi một đối tượng được truyền như

là một đối số cho hàm

 Khi hàm trả về một đối tượng

 Khi có cấp phát động thì hàm khởi tạo sao chép bắt buộc phải định nghĩa lại để tránh trường hợp con trỏ NULL (null pointer assignment)

Trang 9

 Chương 3: Hàm và hàm đa năng trong OOP

c

Tuso:3 Mauso:5

b

Tuso:3 Mauso:5

Trang 10

Phân số

c

Tuso:3 Mauso:5

b

Tuso:3 Mauso:5

Phanso(); // Hàm khởi tạo không đối số

Phanso(int,int); // Hàm khởi tạo 2 đối số Phanso(const Phanso&); // Hàm khởi tạo sao chép

Phanso a; // gọi hàm khởi tạo Phanso()

Phanso b(3,5); // gọi hàm khởi tạo Phanso(int,int)

Phanso c(b); // gọi hàm khởi tạo Phanso(const Phanso&);

}

Trang 11

CString(); // Hàm khởi tạo không đối số

CString(char *s); // Hàm khởi tạo 1 đối số

CString(const CString&); // Hàm khởi tạo sao chép

CString s1; // gọi hàm khởi tạo CString()

CString s2(“Hello world”); // gọi hàm khởi tạo CString(char *str)

CString s3(s2); // gọi hàm khởi tạo CString(const CString&);

Trang 12

 Hàm tại chỗ (inline)

hàm đa năng trong OOP

Trang 13

 Ví dụ:

 Chương 3: Hàm và hàm đa năng trong OOP

float divide(int a,int b=2){

return (float)a/b;

b được gán lại = 5

Trang 14

Ví dụ:

int divide( int a=8, int b) // error

int divide( int a=8, int b=10) // ok

 Giá trị ngầm định phải đúng với kiểu trong khai báo

Ví dụ:

int divide( int a, int b=2.5) // error

int divide( int a, in t b=2) // ok

 Giá trị ngầm định chỉ khai báo một lần trong khai báo hàm hoặc trong định nghĩa hàm nhưng không thể trong cả hai

Trang 15

 Hàm tại chỗ (inline)

 Chương 3: Hàm (phương thức: method) và hàm đa năng trong OOP

Trang 16

Hàm tĩnh: là hàm dùng để truy cập các thành viên dữ liệu tĩnh của lớp Hàm này không thuộc về một đối tượng nào của lớp Hàm được gọi ngay cả khi không có đối tượng nào được tạo bằng cách sử dụng toán tử phạm vi “::”

Cú pháp khai báo chung: dùng từ khoá static trước kiểu dữ liệu hay hàm.

Trang 17

int Student::count=0; // bắt buộc phải khởi tạo

dữ liệu tĩnh trước khi sử dụng, gán =0 vì chưa

có đối tượng nào được tạo

Trang 19

void Student:: printCount(){

cout<<“So doi tuong cua lop Student:”<<count<<endl;

So doi tuong cua lop Student:1

So doi tuong cua lop Student:2

So doi tuong cua lop Student:2

So doi tuong cua lop Student:1

Trang 20

void Student:: printCount(){

cout<<“So doi tuong cua lop Student:”<<count<<endl;

So doi tuong cua lop Student:1

So doi tuong cua lop Student:2

So doi tuong cua lop Student:2

So doi tuong cua lop Student:0

Trang 21

 Hàm tại chỗ (inline)

 Chương 3: Hàm (phương thức: method) và hàm đa năng trong OOP

Trang 22

Lớp bạn: khi tất cả hoặc phần lớn các hàm của một lớp (class B) cần truy xuất đến một lớp khác (class A) thì ta nên cho class

B là bạn của class A

Cú pháp khai báo chung: dùng từ khoá friend trước kiểu dữ liệu trả về của hàm hoặc trước từ khoá class

Trang 23

 Ví dụ: cho biết kết quả của CT sau

 Chương 3: Hàm và hàm đa năng trong OOP

Trang 24

int getData_classA(Alpha a){ return A.data};

int printData_classA(Alpha a){ cout<<A.data};

};

Trang 25

 Hàm bạn được gọi như các hàm truyền thống, không cần có đối tượng gọi

 Nếu B là lớp lớp bạn của A thì tất cả các hàm thành viên của lớp B có quyền truy xuất đến các thành viên dữ liệu nội tại (private) của lớp A nhưng ngược lại thì không

 Chương 3: Hàm và hàm đa năng trong OOP

Trang 26

 Hàm tại chỗ (inline)

hàm đa năng trong OOP

Trang 27

đó nhưng có danh sách các đối số khác nhau

 Phân loại:

 Đa năng với các kiểu dữ liệu khác nhau

 Đa năng với số lượng các đối số khác nhau

Lưu ý: Hàm đa năng không xét kiểu dữ liệu trả về của các hàm

 Chương 3: Hàm và hàm đa năng trong OOP

Trang 28

int Display(int);

int Display(char); // Đa năng với các kiểu dữ liệu khác nhau

void Display(char,int); // Đa năng với số lượng đối số khác nhau

float Display(int); // Error: đây không phài là hàm đa năng vì đã tồn tại hàm Display(int)

};

Trang 29

 Hàm tại chỗ (inline)

 Chương 3: Hàm (phương thức: method) và hàm đa năng trong OOP

Trang 31

Đổi kiểu người dùng thành kiểu cơ bản:

Khai báo và định nghĩa một hàm chuyển đổi

như là một hàm thành viên của lớp: operator

Chuyển đổi kiểu giữa các đối tượng:

Cần nắm rõ lớp nguồn và lớp đích trong việc chuyển đổi mà ta cài đặt hàm khởi tạo chuyển đổi hay hàm chuyển đổi

 Chương 3: Hàm và hàm đa năng trong OOP

Trang 32

Đổi kiểu người dùng thành kiểu cơ bản:

Khai báo và định nghĩa một hàm chuyển đổi

như là một hàm thành viên của lớp: operator

Chuyển đổi kiểu giữa các đối tượng:

Cần nắm rõ lớp nguồn và lớp đích trong việc chuyển đổi mà ta cài đặt hàm khởi tạo chuyển đổi hay hàm chuyển đổi

Trang 33

 Chương 3: Hàm và hàm đa năng trong OOP

Trường hợp 2: Đổi kiểu người dùng thành kiểu cơ bản :

Trang 34

Lớp đích: cài đặt hàm khởi tạo chuyển đổi kiểu

Lớp nguồn: cài đặt hàm chuyển đổi kiểu operator

Hoặc

Trang 35

Trường hợp 3: Đổi kiểu giữa các đối tượng :

class dv_ centimet{

int centimet;

public:

dv_centimet(int cm){centimet=cm;}

int getCentimet(return centimet;)

dv_met(float m){met=m;}

dv_met(dv_centimet cm) {met=(float)cm.getCentimet()/100;}

operator dv_centimet() { return dv_centimet(int(met*100));}

};

http://sites.google.com/site/khaiphong

35

 Chương 3: Hàm và hàm đa năng trong OOP

Cài đặt cho lớp dv_met::

- Hàm khởi tạo chuyển đổi kiểu (giải quyết trường hợp: m=cm)

- Hàm chuyển đổi kiểu operator (giải quyết trường hợp: cm=m)

Trang 36

Cơ bản -> lớp A

Lớp A -> lớp B

Lớp A -> cơ bản

Lớp nguồn: không có Lớp đích: lớp A

Lớp nguồn: lớp A Lớp đích: không có Lớp nguồn: lớp B Lớp đích: lớp A

Trang 37

 Hàm tại chỗ (inline)

 Chương 3: Hàm (phương thức: method) và hàm đa năng trong OOP

Trang 38

Khai báo hàm inline: thêm từ khóa inline

trước kiểu dữ liệu trả về của hàm

};

Trang 39

ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong

39

Trang 40

40

Trang 41

A class C có thể truy xuất các thành viên private của class A

B class B có thể truy xuất các thành viên private của class C

C class B có thể truy xuất các thành viên private của class A

D class A có thể truy xuất các thành viên private của class C

Trang 42

void Func(const UIT& x){

UIT *a1 = new UIT(5);

Trang 43

http://sites.google.com/site/khaiphong

43

Câu 3: Trong các lệnh khai báo đối tượng sau đây, lệnh nào

sẽ gọi constructor sao chép:

Trang 46

46

class A {

private: int x,y;

public:

A(int x1, int y1) { x = x1; y=y1; }

void In() { cout<<x<<", "<<y; }

B Màn hình xuất ra: 10, 10

C Màn hình xuất ra: 20, 10

D Màn hình xuất ra: 20, 20

Trang 48

B Màn hình xuất ra: 10, 10

C Màn hình xuất ra: 20, 10

D Màn hình xuất ra: 20, 20

Trang 50

50

A Trong hàm constructor ta có thể dùng lệnh return để trả về một giá trị cho hàm

B Mỗi lớp chỉ có duy nhất một hàm destructor

C Hàm destructor không thể là một hàm ảo

D Tất cả đều sai

Trang 51

ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong

51

Trang 52

52

1 B Do class B là bạn của class C (Lưu ý: Hàm bạn không tính tính chất bắc cầu)

2 A Đối tượng abc khi kết thúc hàm main sẽ gọi hàm huỷ nên giá trị

cuối cùng chắc chắn phải có 9  chọn A hay D, do trong hàm

main có thực thi hàm Func (trong hàm này tạo đối tượng con trỏ

a với giá trị khởi tạo là 5 và sau đó gọi hàm huỷ đối tượng) 

chọn A

3 B A: gọi phép gán “=“

B: gọi hàm khởi tạo sao chép khi thực thi lệnh Phanso y=x;

C: goi hàm khởi tạo không đối số (D: 2 đối số)

4 A Hàm khởi tạo không đối số sẽ được tạo mặc định khi cả khi

người dùng không khai báo

5 D Lưu ý: trong một lớp nếu toán tử gán “=“ chưa định nghĩa thì

CT sẽ thực hiện sao chép từng byte một từ đối tượng nguồn sang đối tượng đích

Trang 53

thay đổi giá trị của thuộc tính trong lớp A

Lưu ý: Hàm In() trong lớp A là một phương thức hằng (tức hàm

chỉ được phép đọc giá trị mà không được chỉnh sửa giá trị của các thuộc tính dữ liệu trong lớp)

8 D Do x,y có phạm vi truy xuất thuộc public

10 B Hàm khởi tạo không có kiểu trả về Hàm huỷ có thể khai báo là hàm ảo

Ngày đăng: 04/12/2015, 02:50

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