1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu lập trình C tiếng Việt lesson 5Inheristance

51 459 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 667,5 KB

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

Nội dung

 Mọi lớp đều có thể là lớp cơ sở Lớp dẫn xuất có thể là lớp cơ sở của 1 lớp khác Xác định sự phân cấp các lớp... ừ ế Về nguyên tắc, mọi thành phần của lớp cơ sở được thừa kế bởi lớp d

Trang 1

Lập trình hướng đối tượng

Bài 5: Thừa kế

Trang 3

Giới thiệu

Cho phép tạo lớp mới dẫn xuất từ lớp đã có

Point

Circle 3D-Point Point

3D-Point Sphere

Base class/supper class/ parent class

Devived class/ subclass/ child class

Trang 5

Rectangle Triangle

Polygon

class Polygon{

Trang 6

Rectangle Triangle

Polygon

class Polygon{

Trang 7

Khái ni m th a k ệ ừ ế

Point Circle 3D-Point

class Point{

x y r

x y z

Trang 8

Mở rộng lớp gốc

Cá biệt hóa lớp gốc

RealNumber

ComplexNumber

3D-Point

Trang 10

Mọi lớp đều có thể là lớp cơ sở

 Lớp dẫn xuất có thể là lớp cơ sở của 1 lớp khác

Xác định sự phân cấp các lớp

Trang 11

S d n xu t l p ự ẫ ấ ớ

Point 3D-Point

Sphere

Point là lớp cơ sở của 3D-Point, trong khi 3D-Point là lớp cơ sở của Sphere

Trang 12

Th a k là gì? ừ ế

Về nguyên tắc, mọi thành phần của lớp cơ sở được thừa kế bởi lớp dẫn xuất

 có thể với quyền truy cập khác

Trang 13

Đi u khi n truy c p các thành ph n ề ể ậ ầ

Trang 14

Quyền truy cập của lớp dẫn xuất

private protected public

protected private protected protected

public private protected public

Trang 15

Th a k nh ng thành ph n nào? ừ ế ữ ầ

Về nguyên tắc, mọi thành phần của lớp cơ sở được thừa kế bởi lớp dẫn xuất

 Chỉ với quyền truy cập khác

Tuy nhiên, có các ngoại lệ

 Thiết lập và hủy bỏ

 operator=()

 Bạn bè

Do các hàm này là xác định theo lớp

Trang 16

Các luật thiết lập của lớp dẫn xuất

Thiết lập và hủy bỏ mặc định được gọi khi đối tượng mới của lớp dẫn xuất

được tạo hoặc hủy bỏ.

class A {

public:

A ( ) {cout<< “A:default”<<endl;}

A (int a) {cout<<“A:parameter”<<endl;}

}

class B : public A {

public:

B (int a) {cout<<“B”<<endl;}}

B test(1); output: A:default B

Trang 17

Các luật thiết lập của lớp dẫn xuất

Có thể xác định thiết lập của lớp cơ sở khác hơn thiết lập mặc định

public:

C (int a) : A(a)

{cout<<“C”<<endl;}}

Trang 18

Xác đ nh các thành ph n riêng ị ầ

Point Circle

Trang 19

Th m chí nhi u h n … ậ ề ơ

được xác định bởi lớp cha Với việc viết chồng,

 Phương thức của lớp con có ký hiệu xác định tới phương

public:

void print () {cout<<“From B”<<endl;}}

Trang 20

Truy c p ph ng th c ậ ươ ứ

Circle C;

C.set(10,10,100); // from class Circle

C foo (); // from base class Point

C print (); // from class Circle

Point A;

A set (30,50); // from base class Point

A print (); // from base class Point

Trang 21

Đ t chúng cùng nhau ặ

thuộc tính thừa kế public

lớp cơ sở, trừ phương thức thiết lập

public và protected của lớp cơ sở

Trang 22

void Write ( ) const ;

Time ( int initH, int initM, int initS ) ; // constructor

Time ( ) ; // default constructor

Trang 23

Biểu đồ giao diện lớp

Protected data:

hrs mins secs

Set Increment Write Time Time

Time class

Trang 24

Lớp dẫn xuất ExtTime

// SPECIFICATION FILE ( exttime.h)

#include “time.h”

enum ZoneType {EST, CST, MST, PST, EDT, CDT, MDT, PDT } ;

class ExtTime : public Time

// Time is the base class and use public inheritance

{

public :

void Set ( int h, int m, int s, ZoneType timeZone ) ;

void Write ( ) const; //overridden

ExtTime (int initH, int initM, int initS, ZoneType initZone ) ;

ExtTime (); // default constructor

private :

ZoneType zone ; // added data member

} ;

Trang 25

Biểu đồ giao diện lớp

Protected data:

hrs mins secs

ExtTime class

Set Increment Write Time Time

Set Increment Write ExtTime

ExtTime

Private data:

zone

Trang 26

Thể hiện của ExtTime

The default constructor of

base class, Time(), is

automatically called, when an

ExtTime object is created.

ExtTime et1;

hrs = 0 mins = 0 secs = 0 zone = EST et1

Trang 27

Thể hiện của ExtTime

5000

???

6000 5000

Trang 28

Thể hiện của ExtTime

void ExtTime :: Set (int h, int m, int s, ZoneType timeZone)

Trang 29

Làm việc với ExtTime

Trang 30

point(float ox, float oy) {x=ox; y=oy;}

point(point &p) {x=p.x; y=p.y;}

Trang 31

Thí dụ

class coloredpoint:public point{

unsigned int color;

Trang 32

Color: 5adp = &pcadp->move(2,3)Function coloredpoint::display()Call function point::display()Coordinate: 4, 6

Color: 5Call function point::display()Coordinate: 4, 6

 Tương tự với tham chiếu

Trang 33

Tính đa hình và hàm ảo

Giới thiệu tính đa hình

Khả năng thực hiện các công việc khác nhau trước cùng một thông báo

 Là đặc điểm bản chất của ngôn ngữ HĐT

 Được xây dựng dựa trên khả năng thừa kế

 Được gọi là “ Late Binding

 Thể hiện trong C++ sử dụng hàm ảo (virtual

functions)

Trang 34

Biểu đồ giao diện lớp

Protected data:

hrs mins secs

ExtTime class

Set Increment Write Time Time

Set Increment Write ExtTime

ExtTime

Private data:

zone

Time class

Trang 35

Tại sao đa hình?—Xem xét:

Time and ExtTime Example by Inheritance

void Print (Time someTime ) //pass an object by value

// Time :: write()

Trang 36

Liên kết tĩnh

tham số thực sự có thể là:

cùng dạng với dạng chính tắc, hoặc,

dạng dẫn xuất nào đó.

Liên kết tĩnh được xác định lúc dịch

Khi đưa qua bởi giá trị, liên kết tĩnh xảy ra

Trang 37

// Time :: write()

Trang 38

Liên kết động

dựa vào đối số thực sự

xây dựng mã xác định liên kết động

pass-by-reference

Trang 40

Time::write() ExtTime::write()

Trang 41

Các hàm ảo

Hàm ảo khắc phục vấn đề xác định đối tượng thời gian chạy

liên kết trễ và trì hoãn thể hiện đối tượng

 Xác định hàm ảo ở lớp cơ sở Từ khóa virtual chỉ ở lớp cơ sở

 Hàm ảo ở lớp cơ sở sẽ là ảo ở tất cả các lớp dẫn xuất

 Hàm ảo có thể được viết chồng ở lớp dẫn xuất

 Nhưng không bắt buộc lớp dẫn xuất phải thể hiện lại hàm

ảo Nếu nó không thể hiện lại, phiên bản của lớp cơ sở được sử dụng

Trang 42

Tổng kết tính đa hình:

thêm thông tin về các dạng của đối tượng

được tạo

Tính đa hình được hỗ trợ nhờ thông tin bổ

sung này

 Hàm ảo làm việc chỉ với con trỏ hay tham chiếu

 Nếu lớp có hàm ảo, phương thức hủy bỏ của lớp nên được khai báo là ảo

Trang 43

Lớp trừu tượng và hàm thuần ảo

Một số lớp tồn tại lôgíc nhưng không tồn tại vật lý

 Shape s; // Legal but silly !! : “Shapeless shape”

 Shape chỉ được sử dụng như là lớp cơ sở cho một số lớp khác Nó được sử dụng như một sự phân nhóm

 Do đó, không có thể hiện của lớp

class Shape //Abstract

{

public :

virtual void draw() = 0;

}

 L p có 1 hay nhi u hàm thu n o g i ớ ề ầ ả ọ

là l p tr u t ng ớ ừ ượ (Abstract Class)

 Không th t o đ i t ng c a l p ể ạ ố ượ ủ ớ thu n o ầ ả

Trang 45

Hàm thuần ảo không được xác định trong lớp dẫn xuất sẽ duy trì là hàm thuần ảo.

}

Trang 47

Tổng kết … tiếp tục

lớp dẫn xuất, nhưng phần mã chung có thể được giữ

ở lớp cơ sở cho mục đích sử dụng lại

Shape::draw(); //Reuse

cout <<“Rectangle”<< endl; }

Trang 50

Lớp cơ sở ảo

Tình huống:

DA

class A {

int x,y;

};

class B:public A{ };

class C:public A{ };

class D:public B, public C{ };

Trang 51

Lớp cơ sở ảo

class B:public virtual A{ };

class C:public virtual A{ };

class D:public B, public C{ };

Ngày đăng: 28/03/2016, 01:04

TỪ KHÓA LIÊN QUAN