Phương thức huỷ (Destructor) (1/4)
Tự động gọi khi đối tượng bị hủy bỏ (đối tượng rời khỏi phạm vi của nó)
Đặc điểm
Tên trùng với tên lớp & theo sau bởi ký tự “~”
Không có tham số & không có trả về giá trị
Phải có thuộc tính truy xuất là public
Đặc điểm
Chỉ có duy nhất một destructor trong lớp
Nếu một lớp không có định nghĩa destructor thì TBD sẽ tạo ra một destructor mặc định rỗng
Destructor thường được dùng để thực hiện việc giải phòng vùng nhớ đã được cấp phát trước khi một đối tượng bị huỷ bỏ
76 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 482 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng - Chương 3: Lớp và đối tượng - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3 Lớp và đối tượngTRẦN MINH THÁIEmail: minhthai@itc.edu.vnWebsite: www.minhthai.edu.vn Cập nhật: 08 tháng 02 năm 2015Nội dungKhái niệm lớp và đối tượngToán tử gánPhương thức thiết lập (constructor)Phương thức huỷ (destructor)Con trỏ thisLớp templateLớp đối tượng là gì? (1/2)Lớp là khái niệm trung tâm của OOP, là sự mở rộng của khái niệm cấu trúc (struct)Ngoài thành phần dữ liệu (như cấu trúc), lớp còn chứa các thành phần hàm, còn gọi là phương thức (method) hay hàm thành viên (member function)Lớp đối tượng là gì? (2/2)Lớp được xem như một kiểu dữ liệu (kiểu đối tượng)Lớp giúp lập trình viên: Trừu tượng hóa dữ liệuĐóng gói và ẩn thông tinKhai báo lớp (1/2)Cú phápclass class_name{: member_list };Với member_list là đặc tả các thành viênTheo quy ước, tên lớp bắt đầu bởi ký tự CKhai báo lớp (2/2)Thành viên của lớp gồmThành viên dữ liệu (data member) thuộc tínhHàm thành viên (member function) phương thứcclass CTime //Lớp thời gian{ private: int hour, minute, second; public: void SetTime(int h, int m, int s); void Print(); };Thuộc tínhPhương thứcKhai báo lớp: thuộc tính (1/5)Là dữ liệu khai báo trong lớpCú pháp giống như khai báo biếnCó thể là một đối tượng nhưng phải khác đối tượng của lớp đang định nghĩa (con trỏ hay tham chiếu: OK)Không thể vừa khai báo, vừa khởi tạoKhai báo lớp: thuộc tính (2/5)class CTime //Lớp thời gian{ private: int hour = 1; // Error int minute, second; public: void SetTime(int h, int m, int s); void Print(); };Khai báo lớp: phương thức (3/5)Hàm khai báo trong lớp (còn gọi là giao diện)Có thể truy cập các thành viên dữ liệu và hàm thành viên khácCài đặt trong lớp hàm inlineKhai báo lớp: phương thức (4/5)Cú pháptype_name class_name :: method_name ( parameter_list ){ }Hàm inline thêm từ khóa inlineKhai báo lớp: cài đặt phương thức (5/5)class CMyTime{ private: int hour, minute, second; public: void SetTime(int h, int m, int s); void Print() { cout=0 && h=0 && m=0 && sSetTime(1, 5, 7);t3->Print();Sử dụng lớp đối tượng (3/4)Mỗi đối tượng sẽ có một tập các dữ liệu riêng (thuộc tính) được định nghĩa trong lớpTuy nhiên, tập các đối tượng thuộc cùng một lớp chỉ có chung duy nhất các định nghĩa hàm (phương thức) Sử dụng đối tượng (4/4)SetTime()Print()hour=12minute=5second=5hour=11minute=15second=15Đối tượng t1Đối tượng t2CMyTime t1, t2;t1.SetTime(12, 5, 5);t2.SetTime(11,15, 15);t1.Print();t2.Print();Toán tử gán (1/2)Dùng để gán một đối tượng cho một đối tượng khác của cùng một lớpNó được thực hiện bởi toán tử sao chép thành viên (memberwise copy)CMyTime t1;t1.SetTime(12, 5, 5);t1.Print();CMyTime t2;t2 = t1; //memberwise copyt2.Print();Toán tử gán (2/2)Mỗi thành viên của một đối tượng này được sao chép riêng rẽ đến cùng một thành viên tương ứng của đối tượng khácChú ý đối với các thành viên dữ liệu chứa vùng nhớ cấp phát động hoặc con trỏPhương thức thiết lập (Constructor) (1/9)Khởi tạo các thành viên dữ liệu khi đối tượng được tạo raConstructor được gọi tự động mỗi khi một instance của lớp được tạoConstructor thường được dùng để khởi tạo giá trị ban đầu hoặc cấp phát động cho các thành viên dữ liệuPhương thức thiết lập (2/9)Đặc điểmConstructor có cùng tên với lớp và không có giá trị trả về (kể cả void)Phải có thuộc tính truy xuất là publicConstructor có thể có tham số (kể cả tham số mặc định) và đa năng hóaPhương thức thiết lập (3/9)class CMyTime{ private: int hour, minute, second; public: CMyTime() //(1) { hour=minute=second=0; } CMyTime(int h, int m, int s); //(2) void SetTime(int h, int m, int s); void Print(); };CMyTime::CMyTime(int h, int m, int s){ SetTime(h, m, s);}void CMyTime::Print(){ cout=0 && h=0 && m=0 && s>x; s.SetValue(x); cout=0 && h=0 && m=0 && s=0 && h=0 && m=0 && s=1)&&( m0) && (d x = a;}class A{ private: int x; public: A(int x); };A::A(int x){ this -> x = x;}Trùng tên(? phân biệt)Con trỏ this (4/6)class CMyTime{ private: int hour; int minute; int second; public: CMyTime(int h=0, int m=0, int s=0); CMyTime(CMyTime & t); CMyTime & SetTime(int h, int m, int s); CMyTime & SetHour(int h); //Thiet lap hour CMyTime & SetMinute(int m); //Thiet lap minute CMyTime & SetSecond(int s); //Thiet lap second //Cac ham get int GetHour() const; //Tra ve hour int GetMinute() const; //Tra ve minute int GetSecond() const; //Tra ve second void Print() const; };CMyTime::CMyTime(int h, int m, int s){ SetTime(h, m, s);}Con trỏ this (5/6)CMyTime::CMyTime(CMyTime & t){ hour=t.hour; minute=t.minute; second=t.second;}CMyTime & CMyTime::SetTime(int h, int m, int s){ hour=(h>=0 && h=0 && m=0 && s=0 && h=0 && m=0 && sPrint();t2->Print();delete t1;delete t2;CMyTime *t = new CMyTime[10];delete [] t;Con trỏ xác định thành viên của lớp & đối tượng (1/2)Khai báo một con trỏ trỏ đến thành viên của lớp class_name ::* pointer_name;Lấy địa chỉ của một thành viên & class_name :: member_name ->*Truy cập tới thành viên khi đối tượng của lớp & thành viên của đối tượng đều xác định bởi con trỏ.*Được sử dụng khi đối tượng được chỉ ra trực tiếp còn các thành viên của nó thì được xác định nhờ con trỏCon trỏ xác định thành viên của lớp & đối tượng (2/2)class A{ public: int x; void Print() { coutx = 20;cout*px*pf)();Lớp template (1/9)Lớp đặc biệt được tham số sao cho chúng thể hiện một họ các lớpLớp này cũng mang đầy đủ ý tưởng của hàm templateĐịnh nghĩatemplate class_declarationtemplate class_declarationLớp template (2/9)Định nghĩa hàm thành viêntype_name class_name :: method_name ( parameters ){ }Sử dụng class_name object_name ;template class CMyPoint{ private: T x,y; public: CMyPoint(T x=0, T y=0); void Display();};template CMyPoint::CMyPoint(T x, T y){ this->x=x; this->y=y; } template void CMyPoint::Display(){ cout p(10,2);p.Display();CMyPoint *q, *r, *s;q=new CMyPoint;r=new CMyPoint();s=new CMyPoint[10];delete q;delete r;delete [] s;Lớp template (3/9)Lớp template (4/9)Giống như hàm template, các lớp template cũng có các tham số kiểu và tham số biểu thứctemplate class CTable{ private: T a[n] public: void Fun();};template void CTable::Fun(){ }CTable x;Lớp template (5/9)Tham số thực tương ứng với tham số biểu thức phải là hằng sốHai lớp thực thể của cùng lớp template tương ứng với cùng một kiểu nếuCác tham số kiểu tương ứng nhau một cách chính xácCác tham số biểu thức có cùng giá trịLớp template (6/9)template class CTable{ private: T a[n] public: void Fun();};template void CTable::Fun(){ }CTable x;CTable t1;CTable t2;t2 = t1; //ErrorCTable t3;CTable t4;t4 = t3; //ErrorCTable t5;CTable t6;t6 = t5; //OKLớp template (7/9)Các lớp template và hàm template cũng cho phép khai báo friendHàm và lớp thông thường là friendtemplate class CMyClass{ friend class A; friend int Fun(int); };Lớp template (8/9)Một thực thể của hàm template và lớp template là friendtemplate class CMyPoint{ } ;template int F(T a){ }template class CMyClass{ friend class CMyPoint; friend int F(float); };Lớp template (9/9)template class CMyPoint{ } ;template int F(T a){ }template class CMyClass{ template friend class CMyPoint; template friend int F(U); };Hàm template và lớp template là friendQ&A
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_huong_doi_tuong_chuong_3_lop_va_doi_tuon.pptx