Phương pháp lập trình hướng đối tượng - Hàm tạo và hủy đối tượng

Trong ngôn ngữ lập trình C, phần lớn lỗi xảy ra khi lập trình viên quên khởi tạo giá trị ban đầu hoặc hủy 1 đối tượng đã được khai báo.

Đối với C++, khái niệm về khởi tạo và hủy là điều cần thiết để loại bỏ các lỗi này.

 

ppt24 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 2764 | Lượt tải: 2download
Tóm tắt nội dung Phương pháp lập trình hướng đối tượng - Hàm tạo và hủy đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Phương Pháp Lập Trình Hướng Đối Tượng Hàm Tạo Và Hủy Đối Tượng Hàm Tạo Và Hủy Đối Tượng Trong ngôn ngữ lập trình C, phần lớn lỗi xảy ra khi lập trình viên quên khởi tạo giá trị ban đầu hoặc hủy 1 đối tượng đã được khai báo. Đối với C++, khái niệm về khởi tạo và hủy là điều cần thiết để loại bỏ các lỗi này. Hàm khởi tạo(constructor) Nhà lập trình có thể khởi tạo thành phần của mỗi đối tượng bằng 1 hàm đặc biệt gọi là constructor. Hàm khởi tạo sẽ tự động được gọi bởi trình biên dịch ngay tại thời điểm đối tượng được tạo ra. Tên của hàm khởi tạo trùng với tên của lớp đối tượng. Hàm khởi tạo không có giá trị trả về. Hàm Khởi Tạo(constructor). class X() {	private: 	int i; 	public: 	X();// constructor. }; 	 void f() { 	X a; // X::X(); } Trong ví dụ trên, trình biên dịch sẽ tự động chèn lệnh gọi X::X() ngay khi đối tượng a được khai báo Hàm hủy(destructor). Một đối tượng không bị hủy sẽ không có vấn đề gì nếu đó là int, nhưng nếu nó là 1 con trỏ đến 1 vùng nhớ động thì sẽ có 1 số rắc rối nếu nó không được hủy đi. Trong C++ hàm hủy của 1 lớp đối tượng là 1 hàm đặc biệt được tự động gọi khi một đối tượng thuộc lớp bị hủy. Tương tự như hàm khởi tạo, tên của hàm hủy cũng trùng với tên lớp, tuy nhiên nó được phân biệt với hàm khởi tạo bằng 1 dấu (~) ở trước tên hàm. Hàm hủy(destructor) Cú pháp khai báo 1 hàm hủy: class X() {	private: 	… 	public: 	~X();// destructor. }; 	 void g() {	X a; 	… }//	X::~X() Hàm hủy được tự động gọi khi dấu ngoặc({...}) bao quanh phạm vi đối tượng được đóng lại. Ví dụ cụ thể về hàm khởi tạo và hàm hủy #include using namespace std; class Tree {	private: 	int height; public: 	Tree(int initialHeight);	// Constructor 	~Tree();	// Destructor 	void grow(int years); 	void printsize(); }; 	Tree::Tree(int initialHeight) 	{ 	height = initialHeight; 	} 	Tree::~Tree() 	{ 	cout #include using namespace std; class G {	private: 	int i; 	public: 	G(int ii); }; G::G(int ii) { i = ii; } int main() { 	cout > retval; 	int y = retval + 3; 	G g(y); } ///:~ Ở chương trình bên, ta thấy một số đoạn code được thực thi trước khi retval được định nghĩa, khởi tạo và được sử dụng tùy vào mục đích người dùng. Sau đó y và g được xác định. Đây là một gợi ý về phong cách xây dựng hàm tạo(vấn đề về an toàn). Bằng cách giảm thời gian sẵn có của biến trong phạm vi này, bạn đang làm giảm khả năng nó sẽ được sử dụng sai trong một số phần khác trong phạm vi. Ngoài ra,đoạn code sẽ trở nên dễ đọc, vì người đọc không phải quay trở lại nơi khai báo biến nếu muốn biết kiểu của một biến. Vòng Lặp For 	Trong C + +, bạn thường thấy một vòng lặp for xác định: 	 	Các biến i và j được định nghĩa trực tiếp bên trong vòng for (không thể làm trong C). Điền này thuận lợi khi loại bỏ hết các câu hỏi về mục đích và phạm vi sử dụng của biến i và j(chỉ gói gọn bên trong vòng lặp). Tuy nhiên, nếu muốn sử dụng i và j vượt ra khỏi phạm vi vòng lặp thì sẽ gặp một số rắc rối. for(int j = 0; j .h; 	thành phần cài đặt: .cpp 	chương trình :.cpp Ví dụ: //PhanSo.h // With constructors & destructors class PhanSo { 	private: 	int m_iTuSo; 	int m_iMauSo; 	public: 	int LayTuSo(); 	int LayMauSo(); 	void DatTuSo(int iTuso); 	void DatMauSo(int iMauSo);PhanSo Cong(const PhanSo &a); }; Ví dụ(tiếp theo):định nghĩa các thành phần của lớp //PhanSo.cpp #include "iostream.h" #include "PhanSo.h" int PhanSo::LayTuSo() 	{return m_iTuSo; } int PhanSo::LayMauSo() 	{return m_iMauSo; } void PhanSo::DatTuSo(int iTuSo) 	{m_iTuSo = iTuSo;} void PhanSo::DatMauSo(int iMauSo) 	{m_iMauSo = iMauSo;} PhanSo PhanSo::Cong(const PhanSo &a) 	{PhanSo c; 	c.m_iTuSo = this->m_iTuSo * a.m_iMauSo + a.m_iTuSo * this->m_iMauSo; 	c.m_iMauSo = this->m_iMauSo * a.m_iMauSo; 	return c; 	}  Ví dụ(tiếp theo):viết hàm main sử dụng lớp Phanso //chuongtrinh.cpp #include "iostream.h" #include "PhanSo.h" void main() { 	PhanSo a, b, c; 	 a.DatTuSo(1); 	a.DatMauSo(2); 	 b.DatTuSo(1); 	b.DatMauSo(3); 	 c = a.Cong(b); cout data; } void* Stack::pop() { if(head == 0) return 0; void* result = head->data; Link* oldHead = head; head = head->next; delete oldHead; return result; }  Stack::~Stack() { require(head == 0, "Stack not empty"); } ///:~ // Constructors/destructors #include "Stack3.h" #include "../require.h" #include #include #include using namespace std;  int main(int argc, char* argv[]) { requireArgs(argc, 1); // File name is argument ifstream in(argv[1]); assure(in, argv[1]); Stack textlines; string line; // Read file and store lines in the stack: while(getline(in, line)) textlines.push(new string(line)); // Pop the lines from the stack and print them: string* s; while((s = (string*)textlines.pop()) != 0) { cout using namespace std; class Z {int i, j; 	public: 	Z(int ii, int jj); 	 void print();}; Z::Z(int ii, int jj) { i = ii; j = jj; } void Z::print() { cout << "i = " << i << ", j = " << j << endl;} int main() { Z zz[] = { Z(1,2), Z(3,4), Z(5,6), Z(7,8) }; for(int i = 0; i < sizeof zz / sizeof *zz; i++) zz[i].print(); } ///:~ i = 1, j = 2 i = 3, j = 4 i = 5, j = 6 i = 7, j = 8 Kết quả in ra: Sẳm Mộc Sầu_ 08520313 Trần Hoàng Luân_08520221 Tên Thành Viên: 

File đính kèm:

  • pptPhương pháp lập trình hướng đối tượng - Hàm tạo và hủy đối tượng.ppt
Tài liệu liên quan