HÀM XÂY DỰNG, HÀM HỦY VÀ VIỆC KHỞI TẠO ĐỐI TƯỢNG 1 Chương 5 Nội dung • Hàm xây dựng • Hàm hủy • Hàm xây dựng sao chép • Thuộc tính của 1 lớp là đối tượng 2 Hàm xây dựng • Mục đích khởi tạo giá trị ban[.]
Trang 1HÀM XÂY DỰNG, HÀM HỦY VÀ VIỆC KHỞI TẠO ĐỐI TƯỢNG
1
Chương 5
Trang 2• Hàm xây dựng
• Hàm hủy
• Hàm xây dựng sao chép
• Thuộc tính của 1 lớp là đối tượng
2
Trang 3Hàm xây dựng
• Mục đích: khởi tạo giá trị ban đầu cho đối tượng
– Gán giá trị đầu cho các thuộc tính.
– Cấp vùng nhớ cho con trỏ thành viên.
3
class Diem {
int x, y;
public :
Diem( int a)
{ x = y = a; } Diem( int h, int t)
{ x = h; y=t; }
….
};
class PhanSo {
int tu, mau;
public : PhanSo() { tu=0; mau=1; } PhanSo( int x)
{ tu=x; mau=1; } PhanSo( int t, int m) { tu = t; mau=m; }
….
};
Trang 4• Ví dụ:
4
class SinhVien {
char mssv[8];
char* hoten;
int namsinh;
float diemtb;
public :
strcpy(mssv,””);
hoten = new char[50];
namsinh = 1980;
diemtb = 0;
}
oat);
… };
class Stack {
float * ds;
int soluong;
int vitri;
public :
{ soluong = max;
vitri = 0;
ds = new
float [soluong];
}
int n);
… };
Cấp vùng nhớ
cho con trỏ
Trang 5• Nếu không có định nghĩa hàm xây dựng:
– Mặc nhiên sẽ tự động có 1 hàm xây dựng không tham số – Chỉ có 1 cách khởi tạo đối tượng theo dạng không tham số.
5
class Diem {
int x, y;
public :
void InDiem();
void NhapDiem();
void GanGiaTri( int ,
int );
int GiaTriX();
int GiaTriY();
…
};
// Định nghĩa các hàm
thành viên
…
…
a
x y
1000H
void main () { Diem a;
Diem *pa = new Diem();
Diem ds1[10];
Diem *ds2 = new
Diem[20];
… }
Không có giá trị
đầu nên dễ gây ra
hiệu ứng phụ
Hàm xây dựng
Trang 6• Nếu có định nghĩa ít nhất 1 hàm xây dựng:
– Có bao nhiêu hàm xây dựng sẽ có bấy nhiêu cách khởi tạo đối tượng theo dạng đã định nghĩa.
6
void main () {
PhanSo a;
PhanSo b(3);
PhanSo c(2,5);
PhanSo d[3];
PhanSo *pa = new PhanSo;
PhanSo *pa1 = new PhanSo();
PhanSo *pa2 = new PhanSo[5];
PhanSo *pb = new PhanSo(3);
PhanSo *pc = new
PhanSo(2,5);
…
}
void main () { Stack a;
Stack b(5);
Stack c[5];
Stack *pa = new Stack(); Stack *pb = new Stack(40); Stack *pc = new Stack[40]; float data[40];
for ( int i=0;i<10;i++) data[i]=i;
Stack d(data, 30, 10);
… }
Trang 7• Trình tự thực hiện:
– Đối tượng được tạo ra trước.
– Hàm xây dựng sẽ gọi sau trên đối tượng.
7
c
tu mau
2 5
c
tu mau
PhanSo c(2,5);
PhanSo
*pa2 = new
PhanSo[5];
tu mau
1000H
*pa2
100
1000H
*pa2
100 0
0
1 01 01 01 01
0
120 0 5
*ds soluong vitri
1200H
Stack
b(5);
*ds soluong vitri
…
…
…
Hàm xây dựng