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

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

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

Thông tin tài liệu

[r]

(1)

chương 5

D n xu t th a k ế

Có 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 tính k th aế

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

cho phép l p đớ ược xây d ng l pự có Trong chương s nói v s th a k c a l p.ẽ ề ự ế ủ

§ S d n xu t tính th a k ự ẫ ế

1.1 L p c s 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 p d nự ế ộ ọ ẫ

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

L p có th m t l p c s H n th n a, m t l pớ ể ộ ế ữ ộ

có th c s cho nhi u l p d n xu t khác Đ 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 l p dânớ ẫ ấ ể ể ự

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

Dưới m t s s đ v quan h d n xu t c a 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 c s c a l p B, C Dớ ủ

A

B C D

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

A B C

D

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

A B C

D E

F G H

Tính th a k :ừ ế M t l p d n xu t thành ph n c aộ ẫ ấ ầ ủ

riêng nó, cịn th a k t t c thành ph n c a l pừ ế ấ ả ầ ủ

c s có liên quan Ví d s đ l p C ụ ược th a k cácừ ế

thành ph n c a l p B A Trong s đ l p D đầ ủ ớ ược th aừ

k thành ph n c a l p A, B C Trong s đ l p Gế ầ ủ ớ

được th a k thành ph n c a l p D, E, A, B C ế ầ ủ 1.2 Cách xây d ng l p dân xu tự

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

xu t t A B, ta vi t nh sau:ấ ế

class C : public A, public B {

(2)

private:

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

public:

// Các phương th

} ;

1.3 Th a k private publicừ ế

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

t khoá public b ng private, s th a k private ằ ự ế

Chú ý: N u b qua không dùng t khố hi u private, ví dế ỏ ể ụ

n u đ nh nghĩa:ế ị

class C : public A, B {

private:

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

public:

// Các phương th

} ;

thì A l p c s public c a C , B l p c s private c a C.ớ ủ ủ

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

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

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

l p c s s tr thành thành ph n private c a l p d n xu t ẽ ầ ủ ẫ ấ 1.4 Th a k 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 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: thu c tínhư ậ ậ ộ ủ ẫ ấ ẽ ộ

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

l p c s

Tuy v y 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 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ó 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*) b (ki u int) - khai báo Cể ể

(3)

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

t i thu c tính khai báo 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 đâ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; }

(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 đ i tớ ơ ở ố ượng thành ph nầ

L p c s thớ ường 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 1.5

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

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

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

//CT5-02

// Lop co doi tuong 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; }

(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();

}

§ 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 hàm t o, hàm hu , toánớ ế

t gán c a 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ó đ i đ kh i gán cho 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 lo i ng v i cách kh i gánể ộ ứ

khác nhau:

1 Các thu c tính m i khai báo 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 thu c tínhứ ủ ẫ ấ ể ấ ế ộ

này Vì v y chúng thậ ường kh i gán b ng câu l nh gánở ằ ệ

viết 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 thu c tính c a đ i tậ ế ộ ủ ố ượng Vì v y đ kh i gán cho đ i tậ ể ố ượng thành ph n c n dùng hàm t oầ ầ

c a l p tủ ương ng Đi u trình b y m c ứ ề ầ ụ §8 ch ng ươ

3 Các thu c tính th a k t l p c s Trong l p d n xu tộ ế ở ẫ ấ

không phép truy nh p đ n thu c tính Vì v y đậ ế ộ ậ ể

kh i gán cho 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 gi ng nh kh i gán cho đ i tơ ứ ố ố ượng thành ph n, ch khác ch : Đ kh i gán cho đ i tầ ỉ ỗ ể ố ượng thành ph n ta dùng tên đ i tầ ố ượng thành ph n, đ kh i gán choầ ể

các thu c tính th a k t 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 đ 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 ụ ụ §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ì đ i tố ượng thành ph n đ i tầ ố ượng th a k t l pừ ế

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

được g i đ n ọ ế

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

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

(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 Tồn th b ph nể

(7)

Thông thường xem xét, gi i quy t m t toán, ta thả ế ộ ường chia thành tốn nh h n Nói cách khác: M t toán l nỏ ộ

bao g m nhi u tốn b ph n Khi ta có th đ nh nghĩa cácồ ề ộ ậ ể ị

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

xu t t l p nói trên.ấ

Xét m t thí d đ n gi n toán qu n lý th vi n Nó g m 2ộ ụ ả ả ệ

bài toán b ph n qu n lý sách qu n lý đ c gi Chúng ta sộ ậ ả ả ọ ả ẽ

xây d ng l p SACH l p DOC_GIA Sau dùng l p nàyự ớ

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan