Bài giảng Lập trình hướng đối tượng - Chương 2: Hàm dựng và Hàm hủy (Phần 1) - Hồ Tuấn Thanh

Hàm dựng và Hàm hủy  
Lập trình hướng đối tượng  
Hồ Tuấn Thanh – [email protected]  
9/27/18  
1
Hàm dựng  
9/27/18  
2
class PhanSo  
class PhanSo  
{
private:  
int tu, mau;  
public:  
void xuat();  
};  
void PhanSo::xuat()  
{
if(mau < 0)  
{
tu = -tu;  
mau = -mau;  
}
cout << tu << "/" << mau;  
}
9/27/18  
3
Giá trị mặc định của các thuộc tính  
PhanSo p1;  
p1.xuat();  
• Giá trị in ra màn hình là bao nhiêu?  
• Lỗi hoặc giá trị không xác định (rác)  
• Làm thế nào để thiết lập giá trị cụ thể của phân  
số khi vừa được tạo ra.  
9/27/18  
4
Giảm pháp tạm thời è Hàm init()  
void PhanSo::init(int t, int m)  
{
if(m == 0)  
m = 1;  
tu = t;  
mau = m;  
}
PhanSo p1;  
p1.init(3, 4);  
p1.xuat();  
9/27/18  
5
Nếu quên gọi hàm init()  
• Nếu developer khi sử dụng class PhanSo,  
quên gọi hàm init thì sao?  
void PhanSo::init(int t, int m)  
{
if(m == 0)  
m = 1;  
tu = t;  
mau = m;  
}
PhanSo p1;  
p1.init(3, 4);  
p1.xuat();  
9/27/18  
6
Giải pháp tốt hơn è Hàm dựng  
class PhanSo  
{
private:  
int tu, mau;  
public:  
void xuat();  
PhanSo(int t, int m);  
PhanSo::PhanSo(int t, int m)  
{
if(m == 0)  
m = 1;  
tu = t;  
mau = m;  
}
};  
PhanSo p1(3, 4);  
p1.xuat();  
9/27/18  
7
Giải thích  
• Hàm dựng (phương thức thiết lập, constructor)  
là hàm được gọi ngay sau khi đối tượng  
được tạo ra.  
• Khi khai báo:  
PhanSo p1(3, 4);  
• Đối tượng phân số p1 được tạo ra.  
• Hàm dựng 2 tham số của class PhanSo được  
kích hoạt  
PhanSo::PhanSo(int t, int m)  
{
if(m == 0)  
m = 1;  
tu = t;  
mau = m;  
}
Khái niệm hàm dựng  
• Hàm dựng được ngay sau khi đối tượng được  
tạo ra  
• Mỗi class có thể có nhiều hàm dựng  
• Chỉ được gọi khi đối tượng được tạo ra  
p1.PhanSo(3, 4); // ERROR!!!  
• C++:  
• Có tên trùng với tên class  
• Không có kiểu trả về (no return value)  
9/27/18  
9
Hàm dựng 1 tham số  
PhanSo p2(7); // 7/1  
p2.xuat();  
• Cần cài đặt hàm dựng tương ứng: 1 tham số,  
kiểu int  
PhanSo::PhanSo(int x)  
{
tu = x;  
mau = 1;  
}
// Một cách sử dụng khác  
PhanSo p3 = 7;  
p3.xuat();  
9/27/18  
10  
Hàm dựng 1 tham số  
• Cần cài đặt hàm dựng tương ứng: 1 tham số,  
kiểu int  
PhanSo::PhanSo(int x)  
{
tu = x;  
mau = 1;  
}
// Một cách sử dụng khác  
PhanSo p3 = 7;  
p3.xuat();  
9/27/18  
11  
Hàm dựng mặc định & operator =  
PhanSo p7;  
p7 = 18; // p7 = PhanSo(18);  
p7.xuat();  
cout << endl;  
9/27/18  
12  
Hàm dựng mặc định  
PhanSo p4; // 0/1  
p4.xuat();  
9/27/18  
13  
Hàm dựng mặc định  
• Cần cài đặt hàm dựng 0 tham số  
• Còn gọi là hàm dựng mặc định, default  
constructor  
PhanSo::PhanSo()  
{
tu = 0;  
mau = 1;  
}
9/27/18  
14  
Hàm dựng mặc định  
PhanSo p5();  
p5.xuat();  
• Error, compiler sẽ hiểu đây khai báo:  
• Hàm p5()  
• Không tham số  
• Trả về PhanSo  
9/27/18  
15  
Hàm định mặc định  
class PhanSo  
{
private:  
// Ko báo lỗi biên dịch  
PhanSo p4;  
p4.xuat();  
int tu, mau;  
public:  
void xuat();  
};  
• Tại sao tuần trước, em chưa code hàm dựng  
nào hết, mà chỗ PhanSo p4; ko báo lỗi thiếu  
hàm dựng?  
9/27/18  
16  
Hàm dựng mặc định  
• Nếu 1 class chưa có hàm dựng nào hết, thì  
compiler sẽ tạo sẵn 1 hàm dựng mặc định cho  
class đó.  
27/9/18  
17  
Hàm dựng mặc định  
class PhanSo  
{
private:  
int tu, mau;  
public:  
void xuat();  
PhanSo::PhanSo(int t, int m) PhanSo::PhanSo(int x)  
{
{
if(m == 0)  
m = 1;  
tu = t;  
tu = x;  
mau = 1;  
}
mau = m;  
PhanSo(int t, int m); }  
PhanSo(int x);  
};  
PhanSo p1; // Error!!!  
p1.xuat();  
• Tại sao PhanSo p1;lỗi???  
PhanSo p2(7);  
p2.xuat();  
PhanSo p3(5, 6);  
p3.xuat();  
27/9/18  
18  
Hàm dựng mặc định  
• Khi 1 class đã có một số hàm dựng rồi, thì  
class đó phải tự cài hàm dựng mặc định,  
compiler sẽ ko cho nữa.  
27/9/18  
19  
Hàm dựng sao chép  
PhanSo p1(3, 4);  
p1.xuat();  
PhanSo p6(p1); // 3/4  
p6.xuat();  
PhanSo p7 = p1; // 3/4  
p7.xuat();  
27/9/18  
20  
Tải về để xem bản đầy đủ
pdf 36 trang myanh 9900 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 2: Hàm dựng và Hàm hủy (Phần 1) - Hồ Tuấn Thanh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_2_ham_dung_va_ham.pdf
  • cppL03P01-PhanSo.cpp
  • cppPhanSo.cpp
  • hPhanSo.h