1. Trang chủ
  2. » Văn bán pháp quy

Lập trình hướng đối tượng - Dẫn xuất và thừa kế

7 11 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 111,66 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

[r]

Trang 1

ch ươ ng 5

D n xu t và th a k ẫ ấ ừ ế

Có 2 khái ni m r t quan tr ng đã làm nên toàn b th m nh c aệ ấ ọ ộ ế ạ ủ

phương pháp l p trình hậ ướng đ i tố ượng đó là tính k th aế ừ

(inheritance) và tính tương ng b i (polymorphism) Tính k th aứ ộ ế ừ

cho phép các l p đớ ược xây d ng trên các l pự ớ đã có Trong chươ ng

này s nói v s th a k c a các l p.ẽ ề ự ừ ế ủ ớ

§ 1 S d n xu t và tính th a k ự ẫ ấ ừ ế 1.1 L p c s và l p d n xu t ớ ơ ở ớ ẫ ấ

M t l p độ ớ ược xây d ng th a k m t l p khác g i là l p d nự ừ ế ộ ớ ọ ớ ẫ

xu t L p dùng đ xây d ng l p d n xu t g i là l p c s ấ ớ ể ự ớ ẫ ấ ọ ớ ơ ở

L p nào cũng có th là m t l p c s H n th n a, m t l pớ ể ộ ớ ơ ở ơ ế ữ ộ ớ

có th là c s cho nhi u l p d n xu t khác nhau Đ n lể ơ ở ề ớ ẫ ấ ế ượt mình,

l p d n xu t l i có th dùng làm c s đ xây d ng các l p dânớ ẫ ấ ạ ể ơ ở ể ự ớ

xu t khác Ngoài ra m t l p có th d n xu t t nhi u l p c s ấ ộ ớ ể ẫ ấ ừ ề ớ ơ ở

Dưới đây là m t s s đ v quan h d n xu t c a các l p:ộ ố ơ ồ ề ệ ẫ ấ ủ ớ

S đ 1: ơ ồ L p B d n xu t t l p A, l p C d n xu t t l p Bớ ẫ ấ ừ ớ ớ ẫ ấ ừ ớ

A

B

C

S đ 2: ơ ồ L p A là c s c a các l p B, C và Dớ ơ ở ủ ớ

A

S đ 3: ơ ồ L p D d n xu t t 3 l p A, B, Cớ ẫ ấ ừ ớ

D

S đ 4: ơ ồ Lược đ d n xu t t ng quátồ ẫ ấ ổ

Tính th a k : ừ ế M t l p d n xu t ngoài các thành ph n c aộ ớ ẫ ấ ầ ủ riêng nó, nó còn được th a k t t c các thành ph n c a các l pừ ế ấ ả ầ ủ ớ

c s có liên quan Ví d trong s đ 1 thì l p C đơ ở ụ ơ ồ ớ ược th a k cácừ ế thành ph n c a các l p B và A Trong s đ 3 thì l p D đầ ủ ớ ơ ồ ớ ược th aừ

k các thành ph n c a các l p A, B và C Trong s đ 4 thì l p Gế ầ ủ ớ ơ ồ ớ

được th a k các thành ph n c a các l p D, E, A, B và C ừ ế ầ ủ ớ

1.2 Cách xây d ng l p dân xu t ự ớ ấ

Gi s đã đ nh nghĩaả ử ị các l p A và B Đ xây d ng l p C dânớ ể ự ớ

xu t t A và B, ta vi t nh sau:ấ ừ ế ư class C : public A, public B {

Trang 2

// Khai báo các thu c tínhộ

public:

// Các phương th cứ

} ;

1.3 Th a k private và public ừ ế

Trong ví d trên, l p C th a k public các l p A và B ụ ớ ừ ế ớ N u thayế

t khoá public b ng private, thì s th a k là private ừ ằ ự ừ ế

Chú ý: N u b qua không dùng t khoá thì hi u là private, ví dế ỏ ừ ể ụ

n u đ nh nghĩa:ế ị

class C : public A, B

{

private:

// Khai báo các thu c tínhộ

public:

// Các phương th cứ

} ;

thì A là l p c s public c a C , còn B là l p c s private c a C.ớ ơ ở ủ ớ ơ ở ủ

Theo ki u th a k public thì t t c các thành ph n public c aể ừ ế ấ ả ầ ủ

l p c s cũng là các thành ph n public c a l p d n xu t.ớ ơ ở ầ ủ ớ ẫ ấ

Theo ki u th a k private thì t t c các thành ph n public c aể ừ ế ấ ả ầ ủ

l p c s s tr thành các thành ph n private c a l p d n xu t ớ ơ ở ẽ ơ ầ ủ ớ ẫ ấ

1.4 Th a k các thành ph n d li u (thu c tính) ừ ế ầ ữ ệ ộ

Các thu c tính c a l p c s độ ủ ớ ơ ở ược th a k trong l p d n xu t.ừ ế ớ ẫ ấ

Nh v y t p thu c tính c a l p d n xu t s g m: các thu c tínhư ậ ậ ộ ủ ớ ẫ ấ ẽ ồ ộ

m i khai báo trong đ nh nghĩa l p d n xuớ ị ớ ẫ ất và các thu c tính c aộ ủ

l p c s ớ ơ ở

Tuy v y trong l p d n xu t không cho phép truy nh p đ n cácậ ớ ẫ ấ ậ ế

thu c tính private c a l p c s ộ ủ ớ ơ ở

Chú ý: Cho phép đ t trùng tên thu c tính trong các l p c s vàặ ộ ớ ơ ở

l p d n xu t.ớ ẫ ấ

Ví d : ụ

class A { private:

int a, b, c;

public:

};

class B { private:

double a, b, x;

public:

};

class C : public A, B {

private:

char *a , *x ; int b ; public:

};

Khi đó l p C s có các thu c tính:ớ ẽ ộ A::a , A::b, A::c (ki u int) - th a k t Aể ừ ế ừ B::a , B::b, B::x (ki u double) - th a k t Bể ừ ế ừ

a, x (ki u char*) và b (ki u int) - khai báo trong Cể ể

Trang 3

Trong các phương th c c a C ch cho phép truy nh p tr c ti pứ ủ ỉ ậ ự ế

t i các thu c tính khai báo trong C.ớ ộ

1.5 Th a k ph ừ ế ươ ng th c ứ

Tr :ừ

+ Hàm t oạ

+ Hàm huỷ

+ Toán t gánử

các phương th c (public) khác c a l p c s đứ ủ ớ ơ ở ược th a k trongừ ế

l p d n xu t.ớ ẫ ấ

Ví d : ụ Trong chương trình dưới đây:

+ Đ u tiên đ nh nghĩa l p DIEM có:ầ ị ớ

Các thu c tính x, yộ

Hai hàm t oạ

Phương th c in()ứ

+ Sau đó xây d ng l p HINH_TRON d n xu t t l p DIEM,ự ớ ẫ ấ ừ ớ

đ a thêm:ư

Thu c tính rộ

Hai hàm t oạ

Phương th c getRứ

Chú ý cách dùng hàm t o c a l p c s (l p DIEM) đ xâyạ ủ ớ ơ ở ớ ể

d ng hàm t o c a l p d n xu t.ự ạ ủ ớ ẫ ấ

+ Trong hàm main:

Khai báo đ i tố ượng h ki u HINH_TRONể

S d ng phử ụ ương th c in() đ i v i h (s th a k )ứ ố ớ ự ừ ế

S d ng phử ụ ương th c getR đ i v i h ứ ố ớ

//CT5-01

// Lop co so

#include <conio.h>

#include <iostream.h>

class DIEM {

private:

double x, y;

public:

DIEM() {

x = y =0.0;

} DIEM(double x1, double y1) {

x = x1; y = y1;

} void in() { cout << "\nx= " << x << " y= " << y;

} };

class HINH_TRON : public DIEM {

private:

double r;

public:

HINH_TRON() {

r = 0.0;

}

Trang 4

HINH_TRON(double x1, double y1,

double r1): DIEM(x1,y1) {

r = r1;

}

double getR()

{

return r;

}

};

void main()

{

HINH_TRON h(2.5,3.5,8);

clrscr();

cout << "\nHinh tron co tam: ";

h.in();

cout << "\nCo ban kinh= " << h.getR();

getch();

}

1.6 L p c s và đ i t ớ ơ ở ố ượ ng thành ph n ầ

L p c s thớ ơ ở ường được x lý gi ng nh m t thành ph n ki uử ố ư ộ ầ ể

đ i tố ượng c a l p d n xu t Ví d chủ ớ ẫ ấ ụ ương trình trong 1.5 có thể

thay b ng m t chằ ộ ương trình khác trong đó thay vi c dùng l p cệ ớ ơ

s DIEMở b ng m t thành ph n ki u DIEM trong l pằ ộ ầ ể ớ

HINH_TRON Chương trình m i có th vi t nh sau:ớ ể ế ư

//CT5-02

// Lop co doi tuong thanh phan

#include <conio.h>

#include <iostream.h>

class DIEM {

private:

double x, y;

public:

DIEM() {

x = y =0.0;

} DIEM (double x1, double y1) {

x = x1; y = y1;

} void in() { cout << "\nx= " << x << " y= " << y;

} } ; class HINH_TRON {

private:

DIEM d;

double r;

public:

HINH_TRON() : d() {

r = 0.0;

}

Trang 5

HINH_TRON(double x1, double y1, double r1): d(x1,y1)

{

r = r1;

}

void in()

{

d.in();

}

double getR()

{

return r;

}

};

void main()

{

HINH_TRON h(2.5,3.5,8);

clrscr();

cout << "\nHinh tron co tam: ";

h.in();

cout << "\nCo ban kinh= " << h.getR();

getch();

}

§ 2 Hàm t o, hàm hu đ i v i tính th a k ạ ỷ ố ớ ừ ế

2.1 L p d n xu t không th a k các hàm t o, hàm hu , toán ớ ẫ ấ ừ ế ạ ỷ

t gán c a các l p c s ử ủ ớ ơ ở

2.2 Cách xây d ng hàm t o c a l p d n xu t ự ạ ủ ớ ẫ ấ

+ Hàm t o c n có các đ i đ kh i gán cho các thu c tính (thànhạ ầ ố ể ở ộ

ph n d li u) c a l p.ầ ữ ệ ủ ớ + Có th phân thu c tính làm 3 lo i ng v i 3 cách kh i gánể ộ ạ ứ ớ ở khác nhau:

1 Các thu c tính m i khai báo trong l p d n xu t Trong cácộ ớ ớ ẫ ấ

phương th c c a l p d n xu t có th truy xu t đ n các thu c tínhứ ủ ớ ẫ ấ ể ấ ế ộ này Vì v y chúng thậ ường được kh i gán b ng các câu l nh gánở ằ ệ viết trong thân hàm t o ạ

2 Các thành ph n ki u đ i tầ ể ố ượng Trong l p d n xu t khôngớ ẫ ấ cho phép truy nh p đ n các thu c tính c a các đ i tậ ế ộ ủ ố ượng này Vì

v y đ kh i gán cho các đ i tậ ể ở ố ượng thành ph n c n dùng hàm t oầ ầ ạ

c a l p tủ ớ ương ng Đi u này đã trình b y trong m c ứ ề ầ ụ §8 chương 4

3 Các thu c tính th a k t các l p c s Trong l p d n xu tộ ừ ế ừ ớ ở ở ớ ẫ ấ không được phép truy nh p đ n các thu c tính này Vì v y đậ ế ộ ậ ể

kh i gán cho các thu c tính nói trên, c n s d ng hàm t o c a l pở ộ ầ ử ụ ạ ủ ớ

c s Cách th c cũng gi ng nh kh i gán cho các đ i tơ ở ứ ố ư ở ố ượ ng thành ph n, ch khác nhau ch : Đ kh i gán cho các đ i tầ ỉ ở ỗ ể ở ố ượ ng thành ph n ta dùng tên đ i tầ ố ượng thành ph n, còn đ kh i gán choầ ể ở các thu c tính th a k t các l p c s ta dùng tên l p c s :ộ ừ ế ừ ớ ơ ở ớ ơ ở Tên_đ i_tố ượng_thành_ph n(danh sách giá tr ) ầ ị

Tên_l p_c _s (danh sách giá tr ) ớ ơ ở ị Danh sách giá tr l y t các đ i c a hàm t o c a l p d n xu tị ấ ừ ố ủ ạ ủ ớ ẫ ấ đang xây d ngự

(xem ví d m c 2.4 và ụ ụ §6, ví d 1)ụ

2.3 Hàm hu ỷ

Khi m t đ i tộ ố ượng c a l p d n xu t đủ ớ ẫ ấ ược gi i phóng (b hu ),ả ị ỷ thì các đ i tố ượng thành ph n và các đ i tầ ố ượ g th a k t các l pn ừ ế ừ ớ

c s cũng b gi i phóng theo Do đó các hàm hu tơ ở ị ả ỷ ương ng sứ ẽ

được g i đ n ọ ế

Nh v y khi xây d ng hàm hu c a l p d n xu t, chúng ta chư ậ ự ỷ ủ ớ ẫ ấ ỉ

c n quan tâm đ n các thu c tính (không ph i là đ i tầ ế ộ ả ố ượng) khai

Trang 6

y.x[i]=0;

for (j=1; j<=n; ++j)

y.x[i] += a[i][j]*x.x[j];

}

return y;

}

void VT::nhap()

{

int n,i;

n = this->getN();

if (n==0)

{

this->CAP::nhap();

n = this->getN();

}

for (i=1; i<=n; ++i)

{

cout << " PT thu " << i << " = ";

cin >> x[i];

}

}

void VT::xuat()

{

int n,i;

n = this->getN();

if (n)

{ cout << "\n";

for (int i=1; i<=n; ++i) {

cout << x[i] << " ";

} } } void main() {

MT a; VT x,y;

clrscr();

cout<<"\nNhap ma tran A:";

a.nhap();

cout<<"\n\nNhap Vec to X:\n";

x.nhap();

y = a*x;

cout<<"\n\nMa tran A";

a.xuat();

cout<<"\n\nVec to X";

x.xuat();

cout<<"\n\nVec to Y=AX";

y.xuat();

getch();

}

§ 12 Toàn th và b ph n ể ộ ậ

Trang 7

Thông thường khi xem xét, gi i quy t m t bài toán, ta thả ế ộ ườ ng chia nó thành các bài toán nh h n Nói cách khác: M t bài toán l nỏ ơ ộ ớ bao g m nhi u bài toán b ph n Khi đó ta có th đ nh nghĩa cácồ ề ộ ậ ể ị

l p cho các bài toán b ph n L p cho bài toán chung đớ ộ ậ ớ ược d nẫ

xu t t các l p nói trên.ấ ừ ớ

Xét m t thí d đ n gi n là bài toán qu n lý th vi n Nó g m 2ộ ụ ơ ả ả ư ệ ồ bài toán b ph n là qu n lý sách và qu n lý đ c gi Chúng ta sộ ậ ả ả ọ ả ẽ xây d ng l p SACH và l p DOC_GIA Sau đó dùng các l p nàyự ớ ớ ớ làm c s đ xây d ng l p THU_VIEN.ơ ở ể ự ớ

Ngày đăng: 09/03/2021, 05:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w