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
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
• 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 đủ
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:
bai_giang_lap_trinh_huong_doi_tuong_chuong_2_ham_dung_va_ham.pdf
L03P01-PhanSo.cpp
PhanSo.cpp
PhanSo.h

