SlideShare a Scribd company logo
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 1
THỪA KẾTHỪA KẾ
CHƯƠNG 9:CHƯƠNG 9:
(INHERITANCE)(INHERITANCE)
Bộ môn Hệ Thống Máy Tính và Truyền Thông
Khoa Công Nghệ Thông Tin và Truyền Thông
Đại học Cần Thơ
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 2
Nội dungNội dung
 Khái niệm
 Lớp dẫn xuất đơn giản
 Ký hiệu các thứ bậc
 Hàm xây dựng và hàm hủy
 Thành viên lớp được bảo vệ
 Lớp cơ sở riêng, chung và được bảo vệ
 Đa thừa kế - Sự mơ hồ
 Hàm ảo - Lớp cơ sở ảo
 Chuyển kiểu
 Các toán tử được tái định nghĩa
Chương 9
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 3
Khái niệmKhái niệm
 Kế thừa từ các lớp có từ trước.
 Ích lợi: có thể tận dụng lại
 Các thuộc tính chung
 Các hàm có thao tác tương tự
Chương 9
LỚP CHALỚP CHA
(Super class)
LỚP CONLỚP CON
(Sub class)
Lớp cơ sở
(Base class)
Lớp dẫn xuất
(Derived class)
STUDENTSTUDENT
CIT_STUDENTCIT_STUDENT
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 4
Ví dụ minh họaVí dụ minh họa
Chương 9
#include <iostream.h>
#include <string.h>
class ContactContact {
private:
char *name; // ten doi tac
char *address; // dia chi doi tac
char *tel; // so dien thoai
public:
Contact (const char *name,
const char *address, const char *tel);
~Contact ();
const char* Name () const { return name;}
const char* Address() const { return address;}
const char* Tel() const { return tel;}
friend ostream& operator <<
( ostream&, Contact& );
};
class ContactDirContactDir {
private:
int Lookup(const char *name);
Contact **contacts; // ds cac doi tac
int dirSize; // kich thuoc thu muc hien tai
int maxSize; // kich thuoc thu muc toi da
public:
ContactDir (const int maxSize);
~ContactDir();
void Insert(const Contact&);
void Delete(const char *name);
Contact* Find(const char *name);
friend ostream& operator <<
(ostream&, ContactDir&);
// …………
};
ContactDirContactDir ContactContact
nKý hiệu
composition
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 5
Ví dụ minh họa (tt)Ví dụ minh họa (tt)
Chương 9
class SmartDirSmartDir : public ContactDir {
private:
char *recent; // ten duoc tim gan nhat
public:
SmartDir(const int max) : ContactDir(max)
{ recent = 0; }
Contact* Recent (void);
Contact* Find (const char *name);
// …………….
};
Contact* SmartDir::Recent (void) {
return recent == 0 ? 0 :
ContactDir::Find(recent);
}
Contact* SmartDir::Find (const char *name) {
Contact *c = ContactDir::Find(name);
if (c != 0)
recent = (char*) c->Name();
return c;
}
Ký hiệu
Thừa kế
ContactDirContactDir ContactContact
n
SmartDirSmartDir
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 6
Ví dụ (tt) - mô tả trong bộ nhớVí dụ (tt) - mô tả trong bộ nhớ
Chương 9
*contacts 1
*contacts 2
*contacts 3
*contacts i
*contacts n
…
…
**contacts
dirSize
maxSize
**contacts
dirSize
maxSize
*recent*recent
Contact 1
Contact 2
Contact i
…
*contacts 1
*contacts 2
*contacts 3
*contacts i
*contacts n
…
…
Contact 1
Contact 2
Contact i
…
ContactDir
SmartDir
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 7
Hàm xây dựng và hàm hủyHàm xây dựng và hàm hủy
 Trong thừa kế, khi khởi tạo đối tượng:
 Hàm xây dựng của lớp cha sẽ được gọi trước
 Sau đó mới là hàm xây dựng của lớp con.
 Trong thừa kế, khi hủy bỏ đối tượng:
 Hàm hủy của lớp con sẽ được gọi trước
 Sau đó mới là hàm hủy của lớp cha.
Chương 9
AA
BB
CC
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 8
Hàm xây dựng và hàm hủy (tt)Hàm xây dựng và hàm hủy (tt)
Chương 9
class SmartDirSmartDir : public ContactDir {
private:
char *recent; // ten duoc tim gan nhat
public:
SmartDir(const int max) : ContactDir(max)
{ recent = 0; }
SmartDir(const SmartDir& sd): ContactDir(sd)
{ recent = 0; }
~SmartDir() {
delete recent;
}
// …………….
};
Gọi hàm
xây dựng
của lớp cha
Thu hồi vùng nhớ
của con trỏ thành viên
của lớp con nếu đã
cấp vùng nhớ trong
hàm xây dựng.
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 9
Thành viên lớp được bảo vệThành viên lớp được bảo vệ
 Thừa kế:
 Có tất cả các dữ liệu và hàm thành viên.
 Không được truy xuất đến thành viên private.
 Thuộc tính truy cập protectedprotected:
 Cho phép lớp con truy xuất.
Chương 9
class ContactDirContactDir {
//...
protected:
int Lookup (const char *name);
Contact **contacts; // ds cac doi tac
int dirSize; // kich thuoc hien tai
int maxSize; // kich thuoc toi da
};
class Foo {
public:
// cac thanh vien chung...
private:
// cac thanh vien rieng...
protected:
// cac thanh vien duoc bao ve...
public:
// cac thanh vien chung nua...
protected:
// cac thanh vien duoc bao ve nua...
};
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 10
Lớp cơ sở riêng, chung và được bảo vệLớp cơ sở riêng, chung và được bảo vệ
Chương 9
class AA {
private:
int x;
void Fx (void);
public:
int y;
void Fy (void);
protected:
int z;
void Fz (void);
};
class BB : A { // Thừa kế dạng private
…….
};
class CC : private A { // A là lớp cơ sở riêng của B
………
};
class DD : public A { // A là lớp cơ sở chung của C
………
};
class EE : protected A { // A: lớp cơ sở được bảo vệ
……….
};
Lớp cơ sở Thừa kế public Thừa kế private Thừa kế protected
privateprivate _ _ _
publicpublic public private protected
protectedprotected protected private protected
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 11
Đa thừa kếĐa thừa kế
Chương 9
OptionListOptionList WindowWindow
MenuMenu
class WindowWindow {
public:
Window (Rect &);
~Window (void);
//...
};
class Menu
: public OptionList, public Window {
public:
Menu (int n, Rect &bounds);
~Menu (void);
//...
};
Menu::Menu (int n, Rect &bounds) :
OptionList(n), Window(bounds)
{ /* ... */ }
OptionList object
OptionList
data members
Window object
Window
data members
Menu object
OptionList
data members
Window
data members
Menu
data members
class OptionListOptionList {
public:
OptionList (int n);
~OptionList ();
//...
};
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 12
Sự mơ hồ trong đa thừa kếSự mơ hồ trong đa thừa kế
Chương 9
class OptionListOptionList {
public:
// ……
void Highlight (int part);
};
class WindowWindow {
public:
// ……
void Highlight (int part);
};
class Menu : public OptionList,
public Window
{ ……. };
void main() {
Menu m1(….);
m1.Highlight(10);
….
}
GọiGọi
hàmhàm
của lớpcủa lớp
nào ?nào ?
void main() {
Menu m1(….);
m1.OptionList::::Highlight(10);
m1.Window::::Highlight(20);
….
}
Chỉ rõ hàmChỉ rõ hàm
của lớp nàocủa lớp nào
xử lýxử lý
Hàm cùng tênHàm cùng tên
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 13
Chuyển kiểuChuyển kiểu
 Có sẵn 1 phép chuyển kiểu không tường minh:
 Đối tượng lớp cha = Đối tượng lớp con;
 Áp dụng cho cả đối tượng, tham chiếu và con trỏ.
Chương 9
 Không được thực hiện phép gán ngược:
 Đối tượng lớp con = Đối tượng lớp cha; // SAISAI
Menu m(n, bounds);
Window win = m;
Window &wRef = m;
Window *wPtr = &menu;
class MenuMenu : public OptionList, public Window {
public:
//...
Menu (Window&);
};
Nếu muốn thực
hiện
phải tự định nghĩa
phép ép kiểu
Window
data members
OptionList data members
Window data members
Menu data members
win
m
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 14
Hàm ảoHàm ảo
 Liên kết tĩnh (static binding):
 Xác định khi biên dịch chương trình.
 Dùng hàm thành viên.
 Gọi hàm của lớp cơ sở (lớp cha).
Chương 9
class ContactDirContactDir {
//...
public:
int Lookup (const char *name);
//...
};
class SortedDirSortedDir : public ContactDir {
public:
SortedDir(const int max) : ContactDir(max) {}
int Lookup(const char *name);
};
void main() {
ContactDir c1(10);
SortedDir *p; p = &c1;
cout<<p->Lookup(“ABC”);
….
}
GọiGọi
hàmhàm
nào ?nào ?
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 15
Hàm ảo (tt)Hàm ảo (tt)
 Liên kết động (dynamic binding)
 Xác định khi thực thi chương trình.
 Dùng hàm ảo (virtual function).
 Gọi hàm của lớp dẫn xuất (lớp con).
 Thể hiện tính đa hình của OOP.
Chương 9
class ContactDirContactDir {
//...
public:
virtual int Lookup (const char *name);
};
class SortedDirSortedDir : public ContactDir {
//….
public:
int Lookup(const char *name);
};
void main() {
ContactDir c1(10);
SortedDir *p1; p1 = &c1;
cout<<p->Lookup(“ABC”);
SortedDir c2(20);
ContactDir *p2; p2 = &c2;
cout<<p->Lookup(“ABC”);
}
Gọi hàmGọi hàm
của lớpcủa lớp
nào ?nào ?
Kết quảKết quả
trêntrên
màn hìnhmàn hình
là gì?là gì?
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 16
Lớp cơ sở ảoLớp cơ sở ảo
Chương 9
class OptionListOptionList
: public Widget, List
{ /*...*/ };
class WindowWindow
: public Widget, Port
{ /*...*/ };
class MenuMenu
: public OptionList,
public Window
{ /*...*/ };
Đối tượng Menu
 Sự mơ hồ - dư thừa dữ liệu
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 17
Lớp cơ sở ảo (tt)Lớp cơ sở ảo (tt)
 Cách xử lý: dùng lớp cơ sở ảo.
Chương 9
class OptionListOptionList
: virtual public Widget,
public List
{ /*...*/ };
class WindowWindow
: virtual public Widget,
public Port
{ /*...*/ };
class MenuMenu
: public OptionList,
public Window
{ /*...*/ };
Menu::Menu (int n, Rect &bounds) :
Widget(bounds), OptionList(n), Window(bounds)
{ //... }
Chỉ có 1
đối tượng Widget
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 18
Các toán tử được tái định nghĩaCác toán tử được tái định nghĩa
 Tương tự như tái định nghĩa hàm thành viên:
 Che giấu đi toán tử của lớp cơ sở.
 Hàm xây dựng sao chép:
Y::YY (const Y&)(const Y&)
 Phép gán:
Y& Y::operator =operator = (const Y&)
 Nếu không định nghĩa, sẽ tự động có hàm xây
dựng sao chép và phép gán do ngôn ngữ tạo ra.
=> SAISAI khi có con trỏ thành viên.
 Cẩn thận với toán tử new và delete.
Chương 9
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 19
BỔ SUNGBỔ SUNG
MỘT SỐ VẤN ĐỀ KHÁCMỘT SỐ VẤN ĐỀ KHÁC
CẦN TỰ TÌM HIỂU THÊMCẦN TỰ TÌM HIỂU THÊM
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 20
StreamStream
 Nhập xuất thông qua StreamStream (Dòng):
 Tổng quan về Stream.
 Đối tượng nhập xuất chuẩn.
 File.
 Nhập xuất với File đối tượng.
 Tái định nghĩa toán tử << với File.
 Tái định nghĩa toán tử >> với File.
Bổ sung
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 21
TemplateTemplate
 Thiết kế lớp theo TemplateTemplate (mẫu):
 Thế nào là Template.
 Hàm template.
 Lớp template.
 Giới thiệu về STL
(Standard Template Library).
Bổ sung
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 22
ExceptionException
 ExceptionException (Ngoại lệ):
 Ngoại lệ là gì?
 Đề xuất ngoại lệ - Nắm bắt ngoại lệ.
 Ngoại lệ trong C++.
 Cú pháp bắt ngoại lệ trong C++.
 Sử dụng ngoại lệ với Template.
Bổ sung
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 23
ContainerContainer
 ContainerContainer (Lớp vật chứa):
 Container là gì?
Tại sao lại cần Container.
 Container trong C++.
 Một số Container trong 1 phiên bản của C++.
Bổ sung
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 24
Kết thúc chương trình
CÂU HỎI?CÂU HỎI?

More Related Content

What's hot

Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
MasterCode.vn
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Thanh Minh Hoang
 
Pplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPix Nhox
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
mai_non
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Thanh Giảng Lê
 
Nmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhNmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinh
Minh Ngoc Tran
 
Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việt
Môi Trường Việt
 
Nmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcNmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltc
Minh Ngoc Tran
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]bookbooming1
 
Bai tap lap trinh c
Bai tap lap trinh  cBai tap lap trinh  c
Bai tap lap trinh ctiểu minh
 

What's hot (13)

Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
 
Th.nhapmon lt
Th.nhapmon ltTh.nhapmon lt
Th.nhapmon lt
 
C2 basics of_c_and_cpp
C2 basics of_c_and_cppC2 basics of_c_and_cpp
C2 basics of_c_and_cpp
 
Pplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09a
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
 
Nmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhNmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinh
 
Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việt
 
Nmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltcNmlt c02 gioi_thieunnltc
Nmlt c02 gioi_thieunnltc
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
 
Bai tap lap trinh c
Bai tap lap trinh  cBai tap lap trinh  c
Bai tap lap trinh c
 

Viewers also liked

Composite pdf
Composite pdfComposite pdf
Composite pdf
ShakyPickles
 
Pješačke staze i pješačke zone
Pješačke staze i pješačke zonePješačke staze i pješačke zone
Pješačke staze i pješačke zoneprometna
 
19 firea
 19 firea 19 firea
zaffarullah web apps portfolio
zaffarullah web apps portfoliozaffarullah web apps portfolio
zaffarullah web apps portfolioZaffarullah .
 
Sound an holy alarm in my holy mountain 2
Sound an holy alarm in my holy mountain 2Sound an holy alarm in my holy mountain 2
Sound an holy alarm in my holy mountain 2Nick Pellicciotta
 
7trumpets part3-120627224309-phpapp02 (1)
7trumpets part3-120627224309-phpapp02 (1)7trumpets part3-120627224309-phpapp02 (1)
7trumpets part3-120627224309-phpapp02 (1)
Nick Pellicciotta
 
23 givin
 23 givin 23 givin
циклограмма 13 14 уг.год
циклограмма 13 14 уг.годциклограмма 13 14 уг.год
циклограмма 13 14 уг.год
tanja281261
 
The story of a perpetual learner
The story of a perpetual learner The story of a perpetual learner
The story of a perpetual learner
Ali Mujahid
 
SSO (Single Sign On/Off)
SSO (Single Sign On/Off)SSO (Single Sign On/Off)
SSO (Single Sign On/Off)
Russel Mahmud
 
New England
New EnglandNew England
New England
gregtree
 
Making the most of a Facebook Business Page
Making the most of a Facebook Business PageMaking the most of a Facebook Business Page
Making the most of a Facebook Business Page
GreenMeadowsBeef
 
Abstract Project Final
Abstract Project FinalAbstract Project Final
Abstract Project Final
ShakyPickles
 
Dna replication
Dna replicationDna replication
Dna replication
Bharat Lodha
 

Viewers also liked (20)

Composite pdf
Composite pdfComposite pdf
Composite pdf
 
Depression 19 mar-2011-1
Depression 19 mar-2011-1Depression 19 mar-2011-1
Depression 19 mar-2011-1
 
176986025 revelation-19
176986025 revelation-19176986025 revelation-19
176986025 revelation-19
 
Woman and the beast
Woman and the beastWoman and the beast
Woman and the beast
 
Daniel
DanielDaniel
Daniel
 
Pješačke staze i pješačke zone
Pješačke staze i pješačke zonePješačke staze i pješačke zone
Pješačke staze i pješačke zone
 
Diabetes
DiabetesDiabetes
Diabetes
 
19 firea
 19 firea 19 firea
19 firea
 
zaffarullah web apps portfolio
zaffarullah web apps portfoliozaffarullah web apps portfolio
zaffarullah web apps portfolio
 
Sound an holy alarm in my holy mountain 2
Sound an holy alarm in my holy mountain 2Sound an holy alarm in my holy mountain 2
Sound an holy alarm in my holy mountain 2
 
7trumpets part3-120627224309-phpapp02 (1)
7trumpets part3-120627224309-phpapp02 (1)7trumpets part3-120627224309-phpapp02 (1)
7trumpets part3-120627224309-phpapp02 (1)
 
23 givin
 23 givin 23 givin
23 givin
 
циклограмма 13 14 уг.год
циклограмма 13 14 уг.годциклограмма 13 14 уг.год
циклограмма 13 14 уг.год
 
The story of a perpetual learner
The story of a perpetual learner The story of a perpetual learner
The story of a perpetual learner
 
SSO (Single Sign On/Off)
SSO (Single Sign On/Off)SSO (Single Sign On/Off)
SSO (Single Sign On/Off)
 
Lesson01
Lesson01Lesson01
Lesson01
 
New England
New EnglandNew England
New England
 
Making the most of a Facebook Business Page
Making the most of a Facebook Business PageMaking the most of a Facebook Business Page
Making the most of a Facebook Business Page
 
Abstract Project Final
Abstract Project FinalAbstract Project Final
Abstract Project Final
 
Dna replication
Dna replicationDna replication
Dna replication
 

Similar to Lesson09

Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
Hoàng Hà
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Hoàng Hà
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
Darian Pruitt
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1Bễ Nguyễn
 
Dotnet
DotnetDotnet
Dotnet
daicathu
 
Su dung unicode
Su dung unicodeSu dung unicode
Su dung unicode
dangkhuyen
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
Minh Ngoc Tran
 
Oop 8
Oop 8Oop 8
Lap trinh huong_doi_tuong_cpp_dhct_lesson07
Lap trinh huong_doi_tuong_cpp_dhct_lesson07Lap trinh huong_doi_tuong_cpp_dhct_lesson07
Lap trinh huong_doi_tuong_cpp_dhct_lesson07xcode_esvn
 
KTLT.NguyenVanNoi
KTLT.NguyenVanNoiKTLT.NguyenVanNoi
KTLT.NguyenVanNoitgu_violet
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
Nhuận Lê Văn
 

Similar to Lesson09 (20)

Lesson07
Lesson07Lesson07
Lesson07
 
Lesson08
Lesson08Lesson08
Lesson08
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Lab 01
Lab 01Lab 01
Lab 01
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
 
giao trinh c++ Chuong1
giao trinh c++ Chuong1giao trinh c++ Chuong1
giao trinh c++ Chuong1
 
Dotnet
DotnetDotnet
Dotnet
 
Chuong6 (2)
Chuong6 (2)Chuong6 (2)
Chuong6 (2)
 
Su dung unicode
Su dung unicodeSu dung unicode
Su dung unicode
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Oop 8
Oop 8Oop 8
Oop 8
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson07
Lap trinh huong_doi_tuong_cpp_dhct_lesson07Lap trinh huong_doi_tuong_cpp_dhct_lesson07
Lap trinh huong_doi_tuong_cpp_dhct_lesson07
 
KTLT.NguyenVanNoi
KTLT.NguyenVanNoiKTLT.NguyenVanNoi
KTLT.NguyenVanNoi
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
 

More from Tuan Nguyen

Cac giai thuat co ban
Cac giai thuat co banCac giai thuat co ban
Cac giai thuat co banTuan Nguyen
 

More from Tuan Nguyen (7)

Lesson06
Lesson06Lesson06
Lesson06
 
Lesson05
Lesson05Lesson05
Lesson05
 
Lesson04
Lesson04Lesson04
Lesson04
 
Lesson03
Lesson03Lesson03
Lesson03
 
Lesson02
Lesson02Lesson02
Lesson02
 
Lesson00
Lesson00Lesson00
Lesson00
 
Cac giai thuat co ban
Cac giai thuat co banCac giai thuat co ban
Cac giai thuat co ban
 

Lesson09

  • 1. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 1 THỪA KẾTHỪA KẾ CHƯƠNG 9:CHƯƠNG 9: (INHERITANCE)(INHERITANCE) Bộ môn Hệ Thống Máy Tính và Truyền Thông Khoa Công Nghệ Thông Tin và Truyền Thông Đại học Cần Thơ
  • 2. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 2 Nội dungNội dung  Khái niệm  Lớp dẫn xuất đơn giản  Ký hiệu các thứ bậc  Hàm xây dựng và hàm hủy  Thành viên lớp được bảo vệ  Lớp cơ sở riêng, chung và được bảo vệ  Đa thừa kế - Sự mơ hồ  Hàm ảo - Lớp cơ sở ảo  Chuyển kiểu  Các toán tử được tái định nghĩa Chương 9
  • 3. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 3 Khái niệmKhái niệm  Kế thừa từ các lớp có từ trước.  Ích lợi: có thể tận dụng lại  Các thuộc tính chung  Các hàm có thao tác tương tự Chương 9 LỚP CHALỚP CHA (Super class) LỚP CONLỚP CON (Sub class) Lớp cơ sở (Base class) Lớp dẫn xuất (Derived class) STUDENTSTUDENT CIT_STUDENTCIT_STUDENT
  • 4. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 4 Ví dụ minh họaVí dụ minh họa Chương 9 #include <iostream.h> #include <string.h> class ContactContact { private: char *name; // ten doi tac char *address; // dia chi doi tac char *tel; // so dien thoai public: Contact (const char *name, const char *address, const char *tel); ~Contact (); const char* Name () const { return name;} const char* Address() const { return address;} const char* Tel() const { return tel;} friend ostream& operator << ( ostream&, Contact& ); }; class ContactDirContactDir { private: int Lookup(const char *name); Contact **contacts; // ds cac doi tac int dirSize; // kich thuoc thu muc hien tai int maxSize; // kich thuoc thu muc toi da public: ContactDir (const int maxSize); ~ContactDir(); void Insert(const Contact&); void Delete(const char *name); Contact* Find(const char *name); friend ostream& operator << (ostream&, ContactDir&); // ………… }; ContactDirContactDir ContactContact nKý hiệu composition
  • 5. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 5 Ví dụ minh họa (tt)Ví dụ minh họa (tt) Chương 9 class SmartDirSmartDir : public ContactDir { private: char *recent; // ten duoc tim gan nhat public: SmartDir(const int max) : ContactDir(max) { recent = 0; } Contact* Recent (void); Contact* Find (const char *name); // ……………. }; Contact* SmartDir::Recent (void) { return recent == 0 ? 0 : ContactDir::Find(recent); } Contact* SmartDir::Find (const char *name) { Contact *c = ContactDir::Find(name); if (c != 0) recent = (char*) c->Name(); return c; } Ký hiệu Thừa kế ContactDirContactDir ContactContact n SmartDirSmartDir
  • 6. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 6 Ví dụ (tt) - mô tả trong bộ nhớVí dụ (tt) - mô tả trong bộ nhớ Chương 9 *contacts 1 *contacts 2 *contacts 3 *contacts i *contacts n … … **contacts dirSize maxSize **contacts dirSize maxSize *recent*recent Contact 1 Contact 2 Contact i … *contacts 1 *contacts 2 *contacts 3 *contacts i *contacts n … … Contact 1 Contact 2 Contact i … ContactDir SmartDir
  • 7. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 7 Hàm xây dựng và hàm hủyHàm xây dựng và hàm hủy  Trong thừa kế, khi khởi tạo đối tượng:  Hàm xây dựng của lớp cha sẽ được gọi trước  Sau đó mới là hàm xây dựng của lớp con.  Trong thừa kế, khi hủy bỏ đối tượng:  Hàm hủy của lớp con sẽ được gọi trước  Sau đó mới là hàm hủy của lớp cha. Chương 9 AA BB CC
  • 8. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 8 Hàm xây dựng và hàm hủy (tt)Hàm xây dựng và hàm hủy (tt) Chương 9 class SmartDirSmartDir : public ContactDir { private: char *recent; // ten duoc tim gan nhat public: SmartDir(const int max) : ContactDir(max) { recent = 0; } SmartDir(const SmartDir& sd): ContactDir(sd) { recent = 0; } ~SmartDir() { delete recent; } // ……………. }; Gọi hàm xây dựng của lớp cha Thu hồi vùng nhớ của con trỏ thành viên của lớp con nếu đã cấp vùng nhớ trong hàm xây dựng.
  • 9. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 9 Thành viên lớp được bảo vệThành viên lớp được bảo vệ  Thừa kế:  Có tất cả các dữ liệu và hàm thành viên.  Không được truy xuất đến thành viên private.  Thuộc tính truy cập protectedprotected:  Cho phép lớp con truy xuất. Chương 9 class ContactDirContactDir { //... protected: int Lookup (const char *name); Contact **contacts; // ds cac doi tac int dirSize; // kich thuoc hien tai int maxSize; // kich thuoc toi da }; class Foo { public: // cac thanh vien chung... private: // cac thanh vien rieng... protected: // cac thanh vien duoc bao ve... public: // cac thanh vien chung nua... protected: // cac thanh vien duoc bao ve nua... };
  • 10. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 10 Lớp cơ sở riêng, chung và được bảo vệLớp cơ sở riêng, chung và được bảo vệ Chương 9 class AA { private: int x; void Fx (void); public: int y; void Fy (void); protected: int z; void Fz (void); }; class BB : A { // Thừa kế dạng private ……. }; class CC : private A { // A là lớp cơ sở riêng của B ……… }; class DD : public A { // A là lớp cơ sở chung của C ……… }; class EE : protected A { // A: lớp cơ sở được bảo vệ ………. }; Lớp cơ sở Thừa kế public Thừa kế private Thừa kế protected privateprivate _ _ _ publicpublic public private protected protectedprotected protected private protected
  • 11. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 11 Đa thừa kếĐa thừa kế Chương 9 OptionListOptionList WindowWindow MenuMenu class WindowWindow { public: Window (Rect &); ~Window (void); //... }; class Menu : public OptionList, public Window { public: Menu (int n, Rect &bounds); ~Menu (void); //... }; Menu::Menu (int n, Rect &bounds) : OptionList(n), Window(bounds) { /* ... */ } OptionList object OptionList data members Window object Window data members Menu object OptionList data members Window data members Menu data members class OptionListOptionList { public: OptionList (int n); ~OptionList (); //... };
  • 12. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 12 Sự mơ hồ trong đa thừa kếSự mơ hồ trong đa thừa kế Chương 9 class OptionListOptionList { public: // …… void Highlight (int part); }; class WindowWindow { public: // …… void Highlight (int part); }; class Menu : public OptionList, public Window { ……. }; void main() { Menu m1(….); m1.Highlight(10); …. } GọiGọi hàmhàm của lớpcủa lớp nào ?nào ? void main() { Menu m1(….); m1.OptionList::::Highlight(10); m1.Window::::Highlight(20); …. } Chỉ rõ hàmChỉ rõ hàm của lớp nàocủa lớp nào xử lýxử lý Hàm cùng tênHàm cùng tên
  • 13. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 13 Chuyển kiểuChuyển kiểu  Có sẵn 1 phép chuyển kiểu không tường minh:  Đối tượng lớp cha = Đối tượng lớp con;  Áp dụng cho cả đối tượng, tham chiếu và con trỏ. Chương 9  Không được thực hiện phép gán ngược:  Đối tượng lớp con = Đối tượng lớp cha; // SAISAI Menu m(n, bounds); Window win = m; Window &wRef = m; Window *wPtr = &menu; class MenuMenu : public OptionList, public Window { public: //... Menu (Window&); }; Nếu muốn thực hiện phải tự định nghĩa phép ép kiểu Window data members OptionList data members Window data members Menu data members win m
  • 14. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 14 Hàm ảoHàm ảo  Liên kết tĩnh (static binding):  Xác định khi biên dịch chương trình.  Dùng hàm thành viên.  Gọi hàm của lớp cơ sở (lớp cha). Chương 9 class ContactDirContactDir { //... public: int Lookup (const char *name); //... }; class SortedDirSortedDir : public ContactDir { public: SortedDir(const int max) : ContactDir(max) {} int Lookup(const char *name); }; void main() { ContactDir c1(10); SortedDir *p; p = &c1; cout<<p->Lookup(“ABC”); …. } GọiGọi hàmhàm nào ?nào ?
  • 15. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 15 Hàm ảo (tt)Hàm ảo (tt)  Liên kết động (dynamic binding)  Xác định khi thực thi chương trình.  Dùng hàm ảo (virtual function).  Gọi hàm của lớp dẫn xuất (lớp con).  Thể hiện tính đa hình của OOP. Chương 9 class ContactDirContactDir { //... public: virtual int Lookup (const char *name); }; class SortedDirSortedDir : public ContactDir { //…. public: int Lookup(const char *name); }; void main() { ContactDir c1(10); SortedDir *p1; p1 = &c1; cout<<p->Lookup(“ABC”); SortedDir c2(20); ContactDir *p2; p2 = &c2; cout<<p->Lookup(“ABC”); } Gọi hàmGọi hàm của lớpcủa lớp nào ?nào ? Kết quảKết quả trêntrên màn hìnhmàn hình là gì?là gì?
  • 16. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 16 Lớp cơ sở ảoLớp cơ sở ảo Chương 9 class OptionListOptionList : public Widget, List { /*...*/ }; class WindowWindow : public Widget, Port { /*...*/ }; class MenuMenu : public OptionList, public Window { /*...*/ }; Đối tượng Menu  Sự mơ hồ - dư thừa dữ liệu
  • 17. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 17 Lớp cơ sở ảo (tt)Lớp cơ sở ảo (tt)  Cách xử lý: dùng lớp cơ sở ảo. Chương 9 class OptionListOptionList : virtual public Widget, public List { /*...*/ }; class WindowWindow : virtual public Widget, public Port { /*...*/ }; class MenuMenu : public OptionList, public Window { /*...*/ }; Menu::Menu (int n, Rect &bounds) : Widget(bounds), OptionList(n), Window(bounds) { //... } Chỉ có 1 đối tượng Widget
  • 18. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 18 Các toán tử được tái định nghĩaCác toán tử được tái định nghĩa  Tương tự như tái định nghĩa hàm thành viên:  Che giấu đi toán tử của lớp cơ sở.  Hàm xây dựng sao chép: Y::YY (const Y&)(const Y&)  Phép gán: Y& Y::operator =operator = (const Y&)  Nếu không định nghĩa, sẽ tự động có hàm xây dựng sao chép và phép gán do ngôn ngữ tạo ra. => SAISAI khi có con trỏ thành viên.  Cẩn thận với toán tử new và delete. Chương 9
  • 19. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 19 BỔ SUNGBỔ SUNG MỘT SỐ VẤN ĐỀ KHÁCMỘT SỐ VẤN ĐỀ KHÁC CẦN TỰ TÌM HIỂU THÊMCẦN TỰ TÌM HIỂU THÊM
  • 20. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 20 StreamStream  Nhập xuất thông qua StreamStream (Dòng):  Tổng quan về Stream.  Đối tượng nhập xuất chuẩn.  File.  Nhập xuất với File đối tượng.  Tái định nghĩa toán tử << với File.  Tái định nghĩa toán tử >> với File. Bổ sung
  • 21. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 21 TemplateTemplate  Thiết kế lớp theo TemplateTemplate (mẫu):  Thế nào là Template.  Hàm template.  Lớp template.  Giới thiệu về STL (Standard Template Library). Bổ sung
  • 22. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 22 ExceptionException  ExceptionException (Ngoại lệ):  Ngoại lệ là gì?  Đề xuất ngoại lệ - Nắm bắt ngoại lệ.  Ngoại lệ trong C++.  Cú pháp bắt ngoại lệ trong C++.  Sử dụng ngoại lệ với Template. Bổ sung
  • 23. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 23 ContainerContainer  ContainerContainer (Lớp vật chứa):  Container là gì? Tại sao lại cần Container.  Container trong C++.  Một số Container trong 1 phiên bản của C++. Bổ sung
  • 24. Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 24 Kết thúc chương trình CÂU HỎI?CÂU HỎI?