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