Constructor & Destructor trong C++

Các Class lớn thường chứa nhiều dữ liệu và rất phức tạp.

 class String trong thư viện STL của C++ chứa hơn 50 hàm thành viên (clear, copy, find, insert, .) và chứa đựng những cấu trúc dữ liệu bên trong rất phức tạp, và thường liên quan đến cấp phát vùng nhớ động

 --> Vì thế việc khởi tạo và huỷ 1 đối tượng là rất quan trọng.

Người viết class sẽ lo vấn đề này thay cho lập trình viên cuối.

 

ppt31 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 2158 | Lượt tải: 1download
Tóm tắt nội dung Constructor & Destructor trong C++, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Constructor và Destructortrong C++ Bùi Trung Hiếu	08520113 Huỳnh Hoàng Lâm	08520195 Tổng quan vềConstructor và Destructor Các Class lớn thường chứa nhiều dữ liệu và rất phức tạp. 	class String trong thư viện STL của C++ chứa hơn 	50 hàm thành viên (clear, copy, find, insert, ...) và 	chứa đựng những cấu trúc dữ liệu bên trong rất phức 	tạp, và thường liên quan đến cấp phát vùng nhớ 	động 	--> Vì thế việc khởi tạo và huỷ 1 đối tượng là rất quan trọng. Người viết class sẽ lo vấn đề này thay cho lập trình viên cuối. Tổng quan vềConstructor và Destructor Constructor liên quan đến việc cấp phát (allocate) và khởi tạo (initialize) đối tượng. Destructor liên quan đến việc huỷ vùng nhớ đã cấp phát (de-allocate) bởi Constructor Constructor và Destructor đều là public hoặc protected ConstructorCác trường hợp phát sinh Đối tượng được khai báo trên stack (biến tĩnh) 	MyClass a; 	MyClass b[100]; Đối tượng được khai báo động 	MyClass *pa = new MyClass();	MyClass *pb = new MyClass[100]; Chỉ toán tử new mới kích hoạt constructor 	 ConstructorLưu ý về toán tử new Ta có thể gặp 2 dạng sau của new	 	int *pa = new int(3); 	int *pb = new int[3]; Dấu () là gọi constructor của int cho nên pa sẽ trỏ tới 1 vùng nhớ 1 int (4 byte) có giá trị là 3 Còn dấu [] nghĩa là tạo 3 phần tử kiểu int (12 byte) có giá trị ban đầu là zero ConstructorLưu ý về toán tử new Giả sử có class sau:	 	class Sample { 	int x; 	}; 	... 	Sample s;	-> x không xác định 	Sample* ps = new Sample(); 	-> x = 0; ConstructorCú pháp constructor Constructor giống như 1 phương thức bình thường nhưng không có kiểu trả về. Constructor có tên trùng với tên lớp, kèm theo là danh sách đối số. Trình biên dịch luôn tạo 1 constructor mặc định khi chúng ta không viết constructor cho lớp. Constructor này không có đối số và thực chất chỉ là một khối code rỗng {}	 ConstructorVí dụ đơn giản 	class Sample { 	public: 	Sample() { . . . } 	Sample(int a, int b) { . . . } 	}; 1 lớp có thể chứa nhiều constructor Các constructor khác nhau về danh sách đối số Khi ta đã chỉ định ít nhất 1 constructor thì constructor mặc định của trình biên dịch sẽ bị vô hiệu ConstructorCách dùng constructor Giả sử có class như sau 	class Sample { 	public: 	Sample(int a) { 	 cout ~Array(); Đây không phải là 1 thói quen lập trình tốt ! Khi ta gọi destructor một cách tường minh thì không có nghĩa đối tượng bị huỷ ngay lúc gọi mà nó vẫn còn tồn tại đến hết scope của nó, lúc đó destructor được gọi thêm 1 lần nữa. DestructorLưu ý 	class Sample { 	public: 	Sample() { cout<<“I am created”<<endl; } 	~Sample() { cout<<“I am destroyed”<<endl; } 	}; 	void main() { 	Sample s; 	s::~Sample();	 	} Khi chạy code trên ta được 	I am created	//constructor 	I am destroyed	//s::~Sample() 	I am destroyed	//real destructor The End Cảm ơn các bạn đã theo dõi 

File đính kèm:

  • pptConstructor & Destructor trong C++.ppt