Tải bản đầy đủ (.pptx) (43 trang)

Lớp và đối tượng (lập TRÌNH HƯỚNG đối TƯỢNG SLIDE)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (448.65 KB, 43 trang )

Bài 3: Lớp và đối tượng


Lớp (class)
• Lớp là khái niệm trung tâm của lập trình hướng đối tượng. Là sự mở
rộng của struct trong C.
• Lớp là khái niệm trừu tượng, để biểu diễn các đối tượng. Là một
kiểu dữ liệu do người dùng định nghĩa.
▫ Lớp đưa ra miêu tả cho các đối tượng.
▫ Lớp cung cấp một cách thuận tiện để nhóm các dữ liệu và các hàm xử lý
trên dữ liệu đó.
▫ Khi tạo ra một đối tượng là thể hiện của lớp. Khi đó tự động tạo ra các
trường có liên quan.

• Lớp chính là một kiểu dữ liệu do người dùng định nghĩa.


So sánh giữa class và struct
• Struct là class đều là kiểu dữ liệu do người dùng định nghĩa ( đều chứa các
biến và hàm).
• Struct là kiểu dữ liệu tham trị được lưu trong Stack. Trong khi lớp là kiểu
dữ liệu tham chiếu được lưu trong heap.
• Struct khơng hỗ trợ kế thừa, lớp có hỗ trợ kế thừa.
• Struct phù hợp với các cấu trúc dữ liệu nhỏ. Lớp phù hợp với các cấu trúc
dữ liệu phức tạp.
• Struct được khởi tạo khơng cần từ khóa new. Khởi tạo lớp cần từ khóa
new.
• Khi struct được khởi tạo với từ khóa new, khi đó một constructor (hàm
khởi dựng) được gọi để khởi tạo các trường trong cấu trúc.
• Khi struct được khởi tạo khơng dùng từ khóa new thì khơng có constructor
được gọi, do vậy người dùng cần khởi tạo tất cả các trường trước khi sử


dụng.


Nội dung
• Tạo các lớp.
• Cách đóng gói các thành phần vào lớp.
• Thực thi các hàm của lớp.
• Sử dụng hàm private và dữ liệu public
• Sử dụng các toán tử định phạm vi truy cập đối với các biến và
hàm.
• Khai báo static
• Tìm hiểu con trỏ this.
• Đa hình


Khai báo một class
• Khai báo.

class <tên_lớp>
{
[quyền truy xuất:]
//khai báo các thành phần dữ liệu của lớp
[quyền truy xuất:]
//khai báo các thành phần hàm của lớp
};


Khai báo một class
[quyền truy xuất:]



Là khả năng truy xuất thành phần dữ liệu



Ngầm định là private
private: trong phạm vi lớp đó

public: ở mọi nơi nếu đối tượng tồn tại

protected: phạm vi lớp đó và các lớp con kế thừa
Chú ý: Các thuộc tính thành viên của struct cũng có thể được thiết lập là
private, public hoặc protected.


Khai báo một class

Student aSophomore;
aSophomore.idNum = 7645; Error! By default, all members of a
cout<

Khai báo một class
Access modifier


Đóng gói các thành phần của một lớp
Khai báo thành phần
 Dữ liệu:
Tương tự như khai báo biến

<kiểu dữ liệu > <tên_thành_phần>;
Kiểu dữ liệu có thể là kiểu cơ bản hoặc kiểu do người dùng định nghĩa
Chú ý: không được khởi tạo giá trị ban đầu
9/20


Đóng gói các thành phần của một lớp
Khai báo thành phần
 Hàm thành phần
Cách 1: Khai báo trong lớp và định nghĩa ngồi lớp
<kiểu trả về > tênlớp::<tên_hàm>([đối sơ])
{
// <thân hàm>
}
Cách 2: định nghĩa ngay trong lớp

10/20


Đóng gói các thành phần của một lớp


Đóng gói các thành phần của một lớp


Ví dụ
Ví dụ 1:
Xây dựng cấu trúc dữ liệu mơ tả sinh viên:
Dữ liệu: họ tên, ngày sinh, giới tính, Điểm tốn, lý,
hóa, Đtb

Phương thức: nhập, tính đtb, in
 Lớp sinh viên


Ví dụ
Ví dụ 2
Xây dựng cấu trúc dữ liệu mơ tả các hóa đơn:
Dữ liệu: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng,
đơn giá, thành tiền…
Phương thức: nhập, tính thành tiền, in
 Lớp các hóa đơn


Ví dụ
Ví dụ 3
Xây dựng cấu trúc dữ liệu mơ tả các phân số:
Dữ liệu: tử số, mẫu số

Phương thức: nhập, tối giản, in
 Lớp các phân số


Khai báo đối tượng
Cú pháp:
<tên_lớp> <tên_đối_tượng>;
Ví dụ: khai báo 2 đối tượng sinh viên
SV sv1, sv2;
Khi đó sv1, sv2 là hai đối tượng sinh viên



Truy xuất đối tượng
<tên_đối_tượng>.<tên_tp_dữ liệu>;

Ví dụ: truy xuất họ tên và ngày sinh của sv
sv1.ht;
sv2.ns;
Nếu là con trỏ: <tên_con_trỏ>-><tên_tp_dữ liệu>;


Hàm khởi tạo (constructor)
• Hàm khởi tạo là một phương thức đặc biêt của lớp.
• Hàm khởi tạo được thực thi mỗi khi khởi tạo một đối tượng.
• Chú ý:
• Tên của hàm khởi tạo phải trùng với tên lớp.
• Khơng có khai báo kiểu cho hàm tạo.
• Hàm tạo có thể có tham số hoặc khơng có tham số.
• Có thể nạp chồng nhiều hàm tạo.


Hàm khởi tạo
Khai báo:
<tên_lớp>([ds tham số]);
Định nghĩa ngoài lớp:
<tên_lớp>::<tên_lớp>([ds tham số])
{
//thân hàm
}


Dùng hàm tạo để khởi gán các giá trị

thuộc tính cho đối tượng
Class Diem
{
int x;
int y;
Diem(int x, int y);
};
Diem::Diem(int x, int y)
{
this->x=x;
this->y=y;
}
int main()
{
Diem A(0,0);
return 0;
}


Dùng hàm tạo trong cấp phát bộ nhớ
• Dùng hàm tạo trong cấp phát bộ nhớ
Diem *q=new Diem(0,0);
int n=20;
Diem *q= new Diem[n];
• Dùng hàm tạo trong biểu diễn đối tượng hằng.
• Diem(2,4); //Coi nhu mot doi tuong co cac gia tri thuoc tinh
x=2,y=4.
• Giả sử lớp Diem có phương thức in() , khi đó có thể gọi phương
thức đó như sau:
• Diem(2,4).in();



Hàm khởi tạo
Như vậy hàm khởi tạo:
Có với mọi lớp
Tên hàm giống tên lớp
Khơng có kiểu nên khơng cần khai báo
Khơng có giá trị trả về
Nếu khơng xây dựng thì chương trình tự động sinh hàm khởi
tạo mặc định. Nếu đã có một hàm khởi tạo trong lớp thì hàm
khởi tạo mặc định sẽ không được sinh ra.
Được gọi tự động khi khai báo thể hiện của lớp


Hàm khởi tạo sao chép (copy constructor)
• Giả sử có class PS:
• PS u;
• PS v(u) ; // Tạo v theo u
• ý nghĩa của câu lệnh này như sau:
• Nếu trong lớp PS chưa có hàm tạp sao chép thì sẽ gọi đến hàm tạo
sao chép mặc định trong C++. Hàm này sẽ sao chép toàn bộ nội
dung của u vào v.
• Nếu trong PS đã có hàm tạo sao chép. Khi đó sẽ gọi tới hàm tạo
sao chép để khởi tạo v theo u.


Hàm khởi tạo sao chép (copy constructor)
• Cách xây dựng một hàm tạo sao chép.
Tên_lớp (const Tên_lớp & dt)
{

// Các câu lệnh dùng các thuộc tính của đối tượng dt
// để khởi gán cho các thuộc tính của đối tượng mới
}

• Ví dụ
PS (const PS &p)
{
this->t = p.t ;
this->m = p.m ;
}


Hàm khởi tạo sao chép (copy constructor)
• Khi nào cần dùng hàm tạo sao chép
• Khi trong lớp có thuộc tính con trỏ hoặc tham chiếu.
• Ví dụ
• Class DT
{
int n; //Bac cua da thuc
double *a;
}
• Khi đó
DT u;
DT v(u);
=> Khi đó hai con trỏ u.a và v.a cùng trỏ đến một vùng nhớ.


×